昌鑫号

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.获取标签的内容(基本用法)。注意,如果获取一个标签的所有内容,不需要在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

方法二(直接在要搜索内容的标签后面加一个/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的属性(可以通过遍历找到标签的内容来得到一个属性的值)。

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对象,所以如果我们需要找到内容,我们需要遍历数据列表。

在绝对路径下找到标签的属性等于link2.html的内容。

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.上面找到的路径都是绝对路径(每一个都是从根开始搜索的),下面是找到相对路径,比如找到所有li标签下A标签的内容。

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.上面我们用绝对路径发现所有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.在倒数第二个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最新内容,希望能帮到您!更多相关内容欢迎关注。

      
上一篇