海詩網(wǎng) 知識百科 python(python安裝教程)

python(python安裝教程)

python, 如何在python中使用xpath?不知道小伙伴們今天來看看邊肖的分享吧!

一. xpath簡介

XPath是一種在XML文檔中查找信息的語言。XPath可以用來遍歷XML文檔中的元素和屬性。XPath是W3C XSLT標準的主要元素,

XQuery和XPointer都是建立在XPath表達式之上的。

二、安裝

pip3 install lxml

python安裝教程

第三,使用

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后面加一個正斜杠,否則會得到錯誤。

python安裝教程

寫作方法一

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)容來得到一個屬性的值)。

python安裝教程

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屬性。

python安裝教程

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)容歡迎關注。

本文來自網(wǎng)絡,不代表海詩網(wǎng)立場,轉(zhuǎn)載請注明出處:http://x91880.com/n/168889.html
      

python(python手機版)

發(fā)表回復
聯(lián)系我們
聯(lián)系我們

在線咨詢: QQ交談

郵箱: 3587015498@qq.com

工作時間:周一至周五,9:00-17:30,節(jié)假日休息

關注微信
微信掃一掃關注我們
微信掃一掃關注我們
關注微博
返回頂部