python, 如何在python中使用xpath?不知道小伙伴們今天來看看邊肖的分享吧!
一. xpath簡介
XPath是一種在XML文檔中查找信息的語言。XPath可以用來遍歷XML文檔中的元素和屬性。XPath是W3C XSLT標準的主要元素,
XQuery和XPointer都是建立在XPath表達式之上的。
二、安裝
pip3 install lxml
第三,使用
1.導入
from lxml import etree
2.基本用途
from lxml import etree
wb_data=
div
ul
li class=item-0a href=link1.htmlfirst item/a/li
li class=item-1a href=link2.htmlsecond item/a/li
li class=item-inactivea href=link3.htmlthird item/a/li
li class=item-1a href=link4.htmlfourth item/a/li
li class=item-0a href=link5.htmlfifth item/a
/ul
/div
html=etree.HTML(wb_data)
print(html)
result=etree.tostring(html)
print(result.decode(utf-8))
從下面的結果來看,我們的打印機html其實是一個python對象,而etree.tostring(html)是不完整html的基本寫法,完成了缺胳膊少腿的標簽。
Element html at0x39e58f0
htmlbodydiv
ul
li class=item-0a href=link1.htmlfirst item/a/li
li class=item-1a href=link2.htmlsecond item/a/li
li class=item-inactivea href=link3.htmlthird item/a/li
li class=item-1a href=link4.htmlfourth item/a/li
li class=item-0a href=link5.htmlfifth item/a
/li/ul
/div
/body/html
3.獲取標簽的內(nèi)容(基本用法)。注意,如果獲取一個標簽的所有內(nèi)容,不需要在A后面加一個正斜杠,否則會得到錯誤。
寫作方法一
html=etree.HTML(wb_data)
html_data=html.xpath(/html/body/div/ul/li/a)
print(html)
for i in html_data:
print(i.text)
Element html at0x12fe4b8
first item
second item
third item
fourth item
fifth item
方法二(直接在要搜索內(nèi)容的標簽后面加一個/text()即可)。
html=etree.HTML(wb_data)
html_data=html.xpath(/html/body/div/ul/li/a/text())
print(html)
for i in html_data:
print(i)
Element html at0x138e4b8
first item
second item
third item
fourth item
fifth item
4.打開并閱讀html文件
#使用parse打開html文件
html=etree.parse(test.html)
Html_data=html.xpath(//*)br#打印是需要遍歷的列表。
print(html_data)
for i in html_data:
print(i.text)
html=etree.parse(test.html)
html_data=etree.tostring(html,pretty_print=True)
res=html_data.decode(utf-8)
print(res)
打?。?
div
ul
li class=item-0a href=link1.htmlfirst item/a/li
li class=item-1a href=link2.htmlsecond item/a/li
li class=item-inactivea href=link3.htmlthird item/a/li
li class=item-1a href=link4.htmlfourth item/a/li
li class=item-0a href=link5.htmlfifth item/a/li
/ul
/div
5.在指定的路徑下打印標簽A的屬性(可以通過遍歷找到標簽的內(nèi)容來得到一個屬性的值)。
html=etree.HTML(wb_data)
html_data=html.xpath(/html/body/div/ul/li/a/@href)
for i in html_data:
print(i)
打?。?
link1.html
link2.html
link3.html
link4.html
link5.html
6.我們知道xpath得到的都是ElementTree對象,所以如果我們需要找到內(nèi)容,我們需要遍歷數(shù)據(jù)列表。
在絕對路徑下找到標簽的屬性等于link2.html的內(nèi)容。
html=etree.HTML(wb_data)
html_data=html.xpath(/html/body/div/ul/li/a[@href=link2.html]/text())
print(html_data)
for i in html_data:
print(i)
打?。?
[second item]
second item
7.上面找到的路徑都是絕對路徑(每一個都是從根開始搜索的),下面是找到相對路徑,比如找到所有l(wèi)i標簽下A標簽的內(nèi)容。
html=etree.HTML(wb_data)
html_data=html.xpath(//li/a/text())
print(html_data)
for i in html_data:
print(i)
打?。?
[first item, second item, third item, fourth item, fifth item]
first item
second item
third item
fourth item
fifth item
8.上面我們用絕對路徑發(fā)現(xiàn)所有A標簽的屬性都等于href屬性的值,我們用/-絕對路徑。下面,我們使用相對路徑來查找L相對路徑下li標簽下A標簽下href屬性的值。請注意,
標簽后需要一個雙//。
html=etree.HTML(wb_data)
html_data=html.xpath(//li/a//@href)
print(html_data)
for i in html_data:
print(i)
打?。?
[link1.html, link2.html, link3.html, link4.html, link5.html]
link1.html
link2.html
link3.html
link4.html
link5.html
9.在相對路徑下搜索具體屬性的方法和絕對路徑下的類似,也可以說是一樣的。
html=etree.HTML(wb_data)
html_data=html.xpath(//li/a[@href=link2.html])
print(html_data)
for i in html_data:
print(i.text)
打?。?
[Element a at0x216e468]
second item
10.在最后一個li標簽中找到A標簽的href屬性。
html=etree.HTML(wb_data)
html_data=html.xpath(//li[last()]/a/text())
print(html_data)
for i in html_data:
print(i)
打?。?
[fifth item]
fifth item
11.在倒數(shù)第二個li標簽中找到A標簽的href屬性。
html=etree.HTML(wb_data)
html_data=html.xpath(//li[last()-1]/a/text())
print(html_data)
for i in html_data:
print(i)
打?。?
[fourth item]
fourth item
12.如果提取了頁面標簽的xpath路徑,可以顯示如下:
//*[@id=kw]
說明:使用相對路徑查找屬性id等于kw的所有標簽。
python,以上就是本文為您收集整理的python最新內(nèi)容,希望能幫到您!更多相關內(nèi)容歡迎關注。