内容标题
这是一段内容。
这是另一段内容。
XPath(XML Path Language)是一种用于在XML文档中定位元素的语言。它使用路径表达式来选择节点或节点集,类似于文件系统中的路径表达式。
不啰嗦,讲究使用,直接上案例。
pip3 install lxml
from lxml import etree
xml = '''
示例网页
欢迎来到我的网站
这是一个简单的HTML页面,用于演示XPath解析。
内容标题
这是一段内容。
这是另一段内容。
'''
表达式 |
描述 |
/ |
从根节点选取 |
// |
从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置(取子孙节点) |
. |
选取当前节点 |
.. |
选取当前节点的父节点 |
@ |
选取属性 |
tree = etree.HTML(html)
## 从根节点选取
data1 = tree.xpath('/html')
print('从根节点选取:',data1)
## 取head下title的值
data2 = tree.xpath('/html/head/title/text()')
print('取head下title的值:',data2)
## 取子孙节点值
data3 = tree.xpath('//p/text()')
print('取子孙节点值为:',data3)
## 选取当前节点值
all_p = tree.xpath('//p')
for p in all_p:
print('选取当前节点:',p.xpath('.')) # 获取值话:./text()
print('选取当前节点父节点:',p.xpath('..'))
## 获取html,lang属性
attr = tree.xpath('/html/@lang')
print('获取html,lang属性:',attr)
## 获取所有href的属性
href = tree.xpath('//@href')
print('获取所有href的属性:',href)
从根节点选取: []
取head下title的值: ['示例网页']
取子孙节点值为: ['这是一个简单的HTML页面,用于演示XPath解析。', '这是一段内容。', '这是另一段内容。']
选取当前节点: []
选取当前节点父节点: []
选取当前节点: []
选取当前节点父节点: []
选取当前节点: []
选取当前节点父节点: []
获取html,lang属性: ['zh']
获取所有href的属性: ['https://www.example.com/page1', 'https://www.example.com/page2', 'https://www.example.com/page3']
tree.xpath('/html/body/ul/li[1]/a/text()')
tree.xpath('/html/body/ul/li[last()]/a/text()')
tree.xpath('/html/body/ul/li[last()-1]/a/text()')
tree.xpath('//a[@href]')
tree.xpath('//div[@id="content"]')
tree.xpath('/html/body/ul/li[a="链接2"]')
选取属于ul子元素的第一个li元素a值: ['链接1']
选取属于ul子元素的最后一个li元素a值: ['链接3']
选取属于ul子元素的最后一个li元素a值: ['链接2']
选取所有拥有名为 href 的属性的 a 元素: [, , ]
选取所有拥有名为 id=content 的属性的 div 元素: []
选取 ul 元素的所有 li 元素,且其中的 a 元素的值须为 链接2: ['链接2']
tree.xpath('/html/*')
tree.xpath('//*')
tree.xpath('//a[@*]')
tree.xpath('//body/h1 | //body/p')
tree.xpath('//h1 | //p')
选取 html 元素的所有子元素: [, ]
选取文档中的所有元素: [, , , , , , , , , , , , , , , , , ]
选取所有带有属性的 a 元素: [, , ]
选取 body 元素的所有 h1 和 p 元素: [, ]
选取文档中的所有 h1 和 p 元素: [, , , ]