XPath (XML Path Language),即 XML 路径语言,它是一门在 XML文档中查找信息的语言,也适用于HTML 文档的搜索。html
------------ 简注 --------------------------------------------ide
XML 指可扩展标记语言,被设计用来传输和存储数据。函数
HTML 指超文本标记语言,被设计用来显示数据(描述网页)。spa
---------------------------------------------------------------设计
XPath 使用路径表达式来选取 XML 文档中的节点或者节点集。3d
------------ 简注 --------------------------------------------htm
在 XPath 中,有七种类型的节点:元素、属性、文本、blog
命名空间、处理指令、注释以及文档(根)节点。教程
XML 文档是被做为节点树来对待的。图片
树的根被称为文档节点或者根节点。
---------------------------------------------------------------
XPath 包含一个标准函数库,这些函数用于字符串、数值、时间的匹配以及节点、序列的处理等。
1、XPath 经常使用表达式
2、XPath 经常使用函数
position() 返回当前正在被处理节点的 index 位置。
last() 返回当前被处理节点列表中的项目数目。
用法示例
示例文档
1) 选取全部节点
a. 从当前节点 (根节点) 选取全部子孙节点与元素名
demo1 = html.xpath('//*')
print(demo1)
# 运行结果:
'''[<Element html at 0x1a3caa23688>,
<Element body at 0x1a3caa23808>,
<Element bookstore at 0x1a3caa237c8>,
<Element book at 0x1a3caa23848>,
<Element title at 0x1a3caa23888>,
<Element price at 0x1a3caa23908>,
<Element book at 0x1a3caa23948>,
<Element title at 0x1a3caa23988>,
<Element price at 0x1a3caa23c08>]'''
b. 选取全部元素名为 book 的子节点,无需考虑位置
demo2 = html.xpath('//book')
print(demo2)
# 运行结果:
'''[<Element book at 0x204fc5a3808>,
<Element book at 0x204fc5a37c8>]'''
2) 选取子节点
a. 选取 book 节点下的全部子节点
demo3 = html.xpath('//book/*')
print(demo3)
# 运行结果:
'''[<Element title at 0x1c6e5eb3848>,
<Element price at 0x1c6e5eb3808>,
<Element title at 0x1c6e5eb3888>,
<Element price at 0x1c6e5eb38c8>]'''
b. 选取 book 节点的 title 子节点
demo4 = html.xpath('//book/title')
print(demo4)
# 运行结果:
'''[<Element title at 0x200f3443848>,
<Element title at 0x200f3443808>]'''
3) 选取父节点
选取 title 节点的父节点
demo5 = html.xpath('//title/..')
print(demo5)
# 运行结果:
'''[<Element book at 0x26b22553848>,
<Element book at 0x26b22553808>]'''
4) 属性获取 / 属性匹配
a. 选取 lang 属性
demo6 = html.xpath('//@lang')
print(demo6)
# 运行结果:
'''['eng', 'eng']'''
b. 选取属性为 lang 的全部 title 元素
demo7 = html.xpath('//title[@lang]')
print(demo7)
# 运行结果:
'''[<Element title at 0x283dee53848>,
<Element title at 0x283dee53808>]'''
c. 选取 lang 属性的值为 eng 全部 title 元素
demo8 = html.xpath('//title[@lang="eng"]')
print(demo8)
# 运行结果:
'''[<Element title at 0x251380c3808>,
<Element title at 0x251380c37c8>]'''
5) 文本获取
demo9 = html.xpath('//title/text()')
print(demo9)
# 运行结果:
'''['Harry Potter', 'Learning XML']'''
6) 按序获取
a. 选取第一个 book 元素的 title
demo10 = html.xpath('//bookstore/book[1]/title/text()')
print(demo10)
# 运行结果:
'''['Harry Potter']'''
b. 选取最后一个 book 元素的 title
demo11 = html.xpath(
'//bookstore/book[last()]/title/text()')
print(demo11)
# 运行结果:
'''['Learning XML']'''
c. 选取倒数第二个 book 元素的 price
demo12 = html.xpath(
'//bookstore/book[last()-1]/price/text()')
print(demo12)
# 运行结果:
'''['29.99']'''
d. 选取前两个 book 元素的 price
demo13 = html.xpath(
'//bookstore/book[position()<3]/price/text()')
print(demo13)
# 运行结果:
'''['29.99', '39.95']'''
参考文档
XPath 教程:
https://www.w3school.com.cn/xpath/index.asp
https://mp.weixin.qq.com/s/SENEa6jBCyDVt5fMiOiXrw