# XPath
XPath即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言。XPath基于XML的树状结构,有不同类型的节点,包括元素节点,属性节点和文本节点,提供在数据结构树中找寻节点的能力。
# 什么是 XPath?
- XPath 使用路径表达式在 XML 文档中进行导航
- XPath 包含一个标准函数库
- XPath 是 XSLT 中的主要元素
- XPath 是一个 W3C 标准
xpath基础操作样例(使用xpath打印的都是列表)
import lxml
from lxml import etree
html = '''
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div>
<ul class="ul">
<li class="li">1</li>
<li id="li2">2</li>
<li class="li">3</li>
<li class="li">1</li>
<li id="li5">2</li>
<li class="li">3</li>
</ul>
</div>
<ul class="ul">
<li class="li">1</li>
<li id="li2">2</li>
<li class="li">3</li>
</ul>
<p class="ul"></p>
</body>
</html>
'''
# mytree = lxml.etree.parse('./xpath.html')
mytree = lxml.etree.HTML(html)
print(mytree)
# / 从根开始
print(mytree.xpath('/html/head/title/text()'))
# // 所有
print(mytree.xpath('/html/body/div/ul'))
print(mytree.xpath('//ul'))
# . 当前
ul = mytree.xpath('//ul')[0]
li = ul.xpath('./li')
print(li)
# 谓语
li2 = mytree.xpath('//li[@id="li2"]')
for l in li2:
print(l.text)
print(l.xpath('./text()'))
l3 = mytree.xpath('//div//li[3]/text()')
print(l3)
# last() first()
li3 = mytree.xpath('//div//li[last()]/text()')
print(li3, '===')
# 倒数第二个
print(mytree.xpath('//div//li[last()-1]/text()'), '----')
# 从第三个li开始
# position()定位 < > = >= <= !=
print(mytree.xpath('//div//li[position() != 2]'))
# 所有class=ul | 或
print(mytree.xpath('//ul[@class="ul"] | //p[@class="ul"]'),'*****')
print(mytree.xpath('//*[@class="ul"]'))