為什麼要學習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即可得到 一般使用先抓大 ...