Xpath详解

xpath,即XML Path Language

语法

表达式 描述
nodename 选取此节点的所有子节点。
/ 从根节点选取。
// 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
. 选取当前节点。
.. 选取当前节点的父节点。
@ 选取属性。
* 匹配任何元素节点。
@* 匹配任何属性节点。
node() 匹配任何类型的节点。
/title[@lang] 选取所有拥有名为 lang 的属性的 title 元素。
//title[@lang=’eng’] 选取所有 title 元素,且这些元素拥有值为 eng 的 lang 属性。
轴名称 结果
attribute 选取当前节点的所有属性
child 选取当前节点的所有子元素
descendant 选取当前节点的所有后代元素(子、孙等)
parent 选取当前节点的父节点
ancestor 选取当前节点的所有先辈(父、祖父等)
self 选取当前节点

实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
from lxml import etree

texts="""
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>xpath test</title>
</head>
<body>
<div>
<p>计算机科学与技术</p>
</div>
<div class="algorithm">
<p>快速排序</p>
<p>二分查找</p>
<p>前缀和</p>
<p>并查集</p>
<a href="http://www.algorithm.com/" title="算法" target="_self">
<span>this is span</span>
如果你的区间dp时间复杂度很高,python降维打击高精度题</a>
<img src="http://www.baidu.com/go.jpg" alt="" />
</div>
<div class="data">
<ul>
<li><a href="http://www.baidu.com" title="qing">有一个人前来买瓜</a></li>
<li><a href="http://www.163.com" title="qin">生异形吗你们哥,哥俩</a></li>
<li><a href="http://www.126.com" alt="qi">刘华强:哥们儿,这瓜多少钱一斤呐</a></li>
<li><a href="http://www.sina.com" class="du">瓜摊老板:两块钱一斤</a></li>
<li><a href="http://www.dudu.com" class="du">刘华强:What’s up,这瓜皮子是金子做的还是瓜这粒子是金子做的牧</a></li>
<li><b>瓜摊老板:你瞧瞧现在哪有瓜呀,这都是大棚的瓜,你嫌贵我还嫌贵呢</b></li>
<li><i>刘华强:这瓜保熟吗</i></li>
<li><a href="http://www.haha.com" id="feng">瓜摊老板:我开水果摊的,能卖给你生瓜蛋子</a></li>
</ul>
</div>
</body>
</html>
"""

tree=etree.HTML(texts)

r1=tree.xpath('/html/body/div') #直接从上往下挨着找节点
r2=tree.xpath('/html//div')#跳跃了一个节点来找到这个div节点的对象
r3=tree.xpath('//div')##跳跃上面所有节点来寻找div节点的对象
# print(r1,r2,r3) # the same

r4=tree.xpath('//div[@class="algorithm"]')
# print(r4)

r5=tree.xpath('//div[@class="algorithm"]/p')
# print(r5) #返回了所有的p标签

r6=tree.xpath('//div[@class="algorithm"]/p[3]') #注意索引是从1开始的

r7=tree.xpath('//div[@class="data"]//li[5]/a/text()') #取文本
# print(r7)

r8=tree.xpath('//li//text()')

r9=tree.xpath('//div[@class="algorithm"]/img/@src') # @取属性
# print(r9)

print(r1,r2,r3,r4,r5,r6,r7,r8,r9,end='\n')
不要打赏,只求关注呀QAQ