元素定位
基本语法
/ 从根节点开始选取 /html/div/span
// 从任意节点开始选取 //input
. 选取当前节点
.. 选取当前节点的父节点 //input/.. 会选取 input 的父节点
@ 选取属性或者根据属性选取 //input[@data] 选取具备 data 属性的 input 元素 //@data 选取所有 data 属性
* 通配符,表示任意节点或任意属性
标签名
寻找特定标签名的元素
/div 从根节点获取div
//div 从任意节点获取div
/* 从根节点获取任意元素
属性名
寻找带有特定属性的元素,@符号代表要对属性值进行操作了
//div[@class="c1"] class为c1的div元素
//*[@class="c1"] class为c1的任意元素
层级
寻找特定层级的元素
//div[@class="c1"]/p class为c1的div元素下的p元素
//*[@class="c1"]/span[@class="c2"] class为c1的任意元素下的class为c2的span元素
次序
寻找指定排名的元素
//div[@class="c1"]/p[1] class为c1的div元素下的第一个p元素
//*[@class="c1"]/span[@class="c2"][2] class为c1的任意元素下的第二个class为c2的span元素
元素筛选
逻辑表达式
|为逻辑或表达式,表示二者满足其一便可用于链接两个完整的xpath表达式,注意是完整的。
//div[@class="c1"]/p[1]|//*[@class="c1"]/span[@class="c2"][2]
and,or,not是在方括号内用的
//div[@class="c1" or @class="c2"]
判断语句
起始方括号内的语句就是判断语句
/items/item[position() >= 2 and position() <= 5] 寻找/items/item,只匹配其中的第二到第五个
a[text()='Login'] 可以匹配文本为"Login"的所有 <a> 元素。
函数的使用
text
获取节点中所有的字符组成字符串
html
<book>
<title>Learning XPath</title>
</book>
/book/title/text()
结果:
Learning XPath
concat()
concat()
函数用于将两个或多个字符串值连接成一个字符串。
html
<book>
<title>Learning XPath</title>
</book>
concat('The book title is: ', /book/title/text())
结果:The book title is: Learning XPath
substring()
substring()
函数用于从一个字符串中提取子字符串。
html
<book>
<title>XPath for Dummies</title>
</book>
substring(/book/title/text(), 1, 4)
contains()
html
<book>
<title>XPath Fundamentals</title>
</book>
contains(/book/title/text(), 'Path')
true
starts-with()
starts-with()
函数检查一个字符串是否以指定的前缀开始。
html
<book>
<title>XPath Basics</title>
</book>
starts-with(/book/title/text(), 'XPath')
true
number()
number()
函数将字符串转换为数字。
html
<book>
<price>29.99</price>
</book>
number(/book/price/text())
29.99
sum()
sum()
函数用于计算节点集中所有节点的数值之和。
html
<books>
<book>
<price>19.99</price>
</book>
<book>
<price>24.99</price>
</book>
</books>
sum(/books/book/price/text())
44.98
温馨提示
xpath在定位网页元素和获取内容时很有用,它的特性用在爬虫上非常好用,下一篇文章是在python的lxml库中使用xpath。