lxml類庫的xpath的使用

2022-05-11 19:19:56 字數 2953 閱讀 5032

為什麼要學習lxml類庫和xpath呢?

-lxml類庫是一款高效能的python html/xml解析器,我們可以利用xpath,

來快速地定位特定元素以及獲取節點資訊。

-xpath是一門在html/xml文件中查詢資訊的語言,可用來在html/xml文件中對元素和屬性進行遍歷。

xml和html的區別?

-xml:可擴充套件標記語言,被設計為傳輸和儲存資料,其焦點是資料的內容。

-html:超文字標記語言,顯示資料以及如何更好顯示資料。

我們可以使用chrome的xpath-helper外掛程式來幫助我們尋找想要的資料。

xpath-helper的使用?

①獲取文字:

"a/text()"-②

獲取屬性(使用

@符號定位):

"a/@href";"//ul[@id='detail-list']/li/p/text()"

③//的使用:在xpath開始的時候表示從當前html中任意位置開始選擇

-"a//text()":獲取a下的所有文字;

"li//":表示li下任何乙個標籤

注意:使用chrome外掛程式選擇標籤時候,選中的標籤會新增屬性class="xh-highlight"

④面對xpath列表每個元素的索引:

"div[@div='page']/a[2]"(獲取第三個a標籤)

-豆瓣劇情片排行榜:

(獲取最後乙個div標籤)

⑤面對xpath列表一些元素的獲取:"div[@div='page']/a[position()>4]"

(獲取從第5個開始後面的所有a標籤,數字是索引)

注意:使用xpath-helper或者是chrome中的copy xpath都是從element中提取的資料,

但是爬蟲獲取的是url對應的響應,往往和elements不一樣。

所以,這時候lxml類庫的乙個功能就應運而生:

匯入lxml的etree庫:from lxml import etree

利用etree.html,將字串轉化為element物件:html=etree.html(text)

lxml可以自動修正html**。

節點擊擇語法:

/ :從根節點擊取。

// :從匹配選擇的當前節點擊擇文件中的節點,而不考慮他們的位置。

. :選取當前節點。

.. :選取當前節點的父節點。

@ :選取屬性。

* :匹配任何元素節點。

@* :匹配任何屬性節點。

node():匹配任何型別的節點

節點擊擇語法詳細例子說明:

/bookstore/* :選取bookstore元素的所有子元素。

//* :選取文件中的所有元素。

html/node()/meta/@*:選擇html下面任意節點下的meta節點的所有屬性。

//title[@*] :選取所有帶屬性的title元素。

fromlxml importetree

text='''

'''html=etree.html(text)

print(html)

輸出結果:

#這個時候的html是乙個響應狀態。

print(etree.tostring(html).decode())

輸出結果:

#檢視element物件中包含的字串

#lxml能夠修正html**,但是可能會改錯了:

使用etree.tostring觀察修改之後的html的樣子,根據修改之後的html字串寫xpath。

list_1=html.xpath('//li[@class="item-1"]/a/@href')

print(list_1)

list_2=html.xpath('//li[@class="item-1"]/a/text()')

print(list_2)

forhref inlist_1:

item={}

item["href"]=href

item["titile"]=list_2[list_1.index(href)]

print(item)

輸出結果是:

['link1.html', 'link2.html', 'link4.html']

['first item', 'second item', 'forth item']

#要注意的是:xpath輸出的資料型別是列表。

#分組,根據li標籤進行分組,對每一組繼續寫xpath

list_3=html.xpath('//li[@class="item-1"]')

print(list_3)

fori inlist_3:

item={}

item["title"]=i.xpath("./a/@href

")[0]

item["href"]=i.xpath("./a/text()")[0]

print(item)

輸出結果:

[, , ]

{'title': 'link4.html', 'href': 'forth item'

#list_3是物件響應的列表,對於這個列表進行進一步xpath獲取資料處理。

#今後xpath採取資料建議使用這段方法:

#先把物件響應分組,然後對每一組進行直接抓取資料處理,常用的方法使用.符號。

這段**提取頁面資料的思路:

-先分組,渠道乙個包含分組標籤的列表

-遍歷,取其中每一組進行資料的提現,不會造成資料的對應錯亂,避免操作失誤的風險。

注意:lxml能夠接受bytes和str的字串

十 XPath與lxml類庫

1 xml指可擴充套件標記語言 extensible markup language 2 xml是一中標記語言,類似於html 3 xml的設計宗旨是傳輸資料,而非顯示資料 4 xml的標籤需要我們自行定義 5 xml被設計為具有自我描述性 6 xml是w3c的推薦標準 官方文件 資料格式 描述設計...

Python爬蟲Xpath和lxml類庫系列之九

xpath xml path language 是一門在 xml 文件中查詢資訊的語言,可用來在 xml 文件中對元素和屬性進行遍歷。謂語用來查詢某個特定的節點或者包含某個指定的值的節點,被嵌在方括號中。xpath 萬用字元可用來選取未知的 xml 元素。通過在路徑表示式中使用 運算子,您可以選取若...

lxml 模組下 xpath 的使用

匯入方式 from lxml import etree 用於建立初始根節點 用於向下層尋找 用於提取屬性內容 text 用於提取文字內容 xpath路徑可以手動尋找 也可以借助工具進行尋找 這裡推薦使用chrome 瀏覽器 f12 開啟開發者工具,選擇對應位置 右鍵copy即可得到 一般使用先抓大 ...