python 爬蟲(XPATH使用)

2021-10-10 19:28:49 字數 4360 閱讀 2113

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...