xpath(xml path language)是一門在xml文件中查詢資訊的語言,可用來在xml文件中對元素和屬性進行遍歷。
w3school官方文件:
pip install lxml
如果出現網路延遲,可使用清華源進行安裝
匯入兩種匯入方式
第一種:直接匯入
from lxml import etree
注意:此種匯入方式,可能會報錯(etree下面會出現紅色波浪線,不影響正常使用)
第二種:正規軍
from lxml import html
etree = html.etree
1、etree.html() 將字串轉換成html元素物件,可以自動新增缺失的元素html = etree.html(
str)
# print
(html)
#
2. tostring()方法:
2.1 tostring() 檢視轉換之後的內容(二進位制型別)
如果想要檢視字串型別,需要解碼
如果想要顯示漢字,需要先編碼,再解碼
content = etree.tostring(html,encoding=
'utf-8'
)print
(content.decode(
))
2.2 xpath()方法 作用:提取頁面資料,返回值是乙個列表
xpath的使用一定是建立在etree.html()之後的內容中的
xpath是如何來提取頁面資料的?
答:使用的是路徑表示式
windows:d:\19課堂\offcn_live\***x.exe
2.2.1 xpath路徑分為兩種:
第一種:/ 代表一層層的查詢,如果/存在於開頭,代表根路徑
例如:查詢bookstore標籤
bookstore = html.xpath(
'/html/body/bookstore'
)print
(bookstore)
#
第二種:// 任意路徑 焦點在元素身上
例如:查詢bookstore標籤
bookstore = html.xpath(
'//bookstore'
)print
(bookstore)
#
第一種和第二種結合
例如:查詢所有book標籤
book = html.xpath(
'//bookstore/book'
)print
(book)
# [, , , , ]
2.2.2 /text() 獲取標籤之間的內容例如:獲取所有title標籤的內容
步驟:1
. 找到所有title標籤
2. 獲取內容
title = html.xpath(
'//book/title/text()'
)print
(title)
# ['harry potter', 'learning xml', '西遊記', '水滸傳', '三國演義']
2.3 謂語 使用 可以理解成條件
2.3.1 [n] 代表獲取第n個元素,n是數字,n>=1
例如:獲取第二個title標籤
title = html.xpath(
'//book[2]/title/text()'
)print
(title)
# ['learning xml']
last() 獲取最後乙個
同理:last()-1 獲取倒數第二個
例如:獲取最後一本書的title標籤之間的內容
title = html.xpath(
'//book[last()]/title/text()'
)print
(title)
# ['三國演義']
2.3.2 position() 位置,範圍 支援 > / < / = / >= / <= / !=
例如:獲取最後兩本書的title標籤之間的內容
步驟:先獲取後兩本書
獲取內容
title = html.xpath(
'//book[position()>3]/title/text()'
)title = html.xpath(
'//book[position()>last()-2]/title/text()'
)print
(title)
# ['水滸傳', '三國演義']
2.3.3 獲取屬性值:@屬性名
例如:獲取lang屬性值為cng的title標籤的內容
title = html.xpath(
'//book/title[@lang="cng"]/text()'
)print
(title)
# ['西遊記']
例如:獲取包含src屬性的title標籤的內容
title = html.xpath(
'//book/title[@src]/text()'
)print
(title)
例如:獲取包含屬性的title標籤的內容
title = html.xpath(
'//book/title[@*]/text()'
)print
(title)
# ['harry potter', 'learning xml', '西遊記', '水滸傳', '三國演義']
例如:獲取最後乙個title標籤的src屬性的值
title = html.xpath(
'//book[last()]/title/@src'
)print
(title)
# ['']
例如:獲取所有包含src屬性的標籤之間的內容
node = html.xpath(
'//*[@src]/text()'
)print
(node)
# ['harry potter', '水滸傳', '三國演義']
2.4 and 與 連線的是謂語(條件)
例如:獲取lang="dng"並且class="t1"的title標籤的內容
title = html.xpath(
'//book/title[@lang="dng" and @class="t1"]/text()'
)title = html.xpath(
'//book/title[@lang="dng"][@class="t1"]/text()'
)print
(title)
# ['三國演義']
2.5 or 或 連線謂語
例如:查詢lang="cng"或者lang="bng"的title標籤的內容
title = html.xpath(
'//book/title[@lang="cng" or @lang="bng"]/text()'
)print
(title)
2.6 | 連線路徑
例如:獲取所有title標籤和price標籤之間的內容
title_price = html.xpath(
'//title/text() | //price/text()'
)print
(title_price)
# ['harry potter', '29.99', 'learning xml', '39.95', '西遊記', '69.95', '水滸傳', '29.95', '三國演義', '29.95']
2.7 parse() 作用:從檔案中讀取資料
注意:讀取的檔案,必須滿足xml格式(不存在單標籤,全部都是雙標籤)
content = etree.parse(
'node.html'
)print
(content)
# res = etree.tostring(content)
print
(res)
Python 爬蟲 XPATH使用總結
xpath的常用規則 nodename 選取此節點的所有子節點 從當前節點擊取直接子節點 從當前節點擊取子孫節點 選取當前節點 選取當前節點的父節點 選取屬性 匹配規則 lang eng from lxml import etree text html etree.html text result ...
python爬蟲XPath學習
xpath簡介和基本使用 1.前言 之前爬蟲的時候沒有用過xpath,就是沒用過lxml這個包,遇到json格式網頁我用的json.loads html格式用的beautifulsoup裡面有find和find all函式查詢標籤之類的。但是xpath在爬蟲裡面也算乙個比較重要的工具,當然要學習啦。...
python爬蟲學習 xpath
1.例項化乙個etree的物件,且需要將被解析的頁面原始碼資料載入到該物件中。2.呼叫etree物件中的xpath方法結合著xpath表示式實現標籤的定位和內容的捕獲。pip install lxml1.將本地的html文件中的原始碼資料載入etree物件中 etree.parse filepath...