网页爬虫XPath 定位

网页爬虫XPath 定位

最近使用到了XPath进行爬虫标签的定位,就将常用的语法总结了一下,方便下次使用时做参考。


1.基本语法

# 倒数第二个 book 元素
//bookstore/book[last()-1]
# 除了第一个 book 元素
//bookstore/book[position()>1]
# price 元素的值须大于 35.00 且不等于 38.00
//bookstore/book[price>35.00 and price!=38.00]

# 标签属性定位
//input[@class='container']
//input[@type='text' and @name='username']

# 标签属性条件匹配定位
//input[start-with(@id,'post')]
//input[ends-with(@id,'post')]
//input[contains(text(),'下一页')]

# 组合条件:选取 book 元素的所有 title 和 price 元素
//book/title | //book/price 

# 相邻标签:选取a标签同级的上一个p元素
//a/preceding-sibling::p[1]
# 下一个p元素
//a/following-sibling::p[1]

# 父子标签:
# 上一级父标签
//a/parent::* 
# 所有父标签
//a/ancestor::*
# 下一级子标签
//a/child::*
# 所有子标签
//a/descendant::*

2.高级用法

# 节点统计
count(//li[@data])')

# 字符串连接
concat(//li[@data="one"]/text(),//li[@data="three"]/text())

# 解析当前节点下的字符,作用于list时只匹配第一个
string(//li)

# 解析节点名称
local-name(//*[@id="testid"])

# 组合定位:匹配带有href属性的a标签的先辈节点中的div,其兄弟节点中前一个div节点下ul下li中text属性包含“务”字的节点的值
//a[@href]/ancestor::div/preceding::div/ul/li[contains(text(),"务")]/text()

# not:布尔值(否):不包含data属性的li标签统计
count(//li[not(@data)])

# 返回指定字符串的长度:string-length函数+local-name函数定位节点名长度小于2的元素
//*[string-length(local-name())<2]/text()

# 组合:contains函数+local-name函数定位节点名包含di的元素
//div[@id="testid"]/following::div[contains(local-name(),"di")]

猜你喜欢

转载自blog.csdn.net/kxwinxp/article/details/80686885