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.获取标签的内容(基本用法)。注意,如果获取一个标签的所有内容,不需要在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
方法二(直接在要搜索内容的标签后面加一个/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的属性(可以通过遍历找到标签的内容来得到一个属性的值)。
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属性。
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最新内容,希望能帮到您!更多相关内容欢迎关注。