xpath语法的介绍
一、关于xpath
的认识
xpath(XML Path Language)
是一门在XML
和HTML
文档中查找信息的语言,可用来在XML
和HTML
文档中对元素和属性进行遍历。
二、xpath
的基本语法
- 1、选择节点
表达式 | 描素 | 示例 | 结果 |
---|---|---|---|
nodename | 选取此节点的所有子节点 | html | 选取html下面所有子节点 |
/ | 从当前节点选取直接子节点 | /name1 | 选取根元素下所有的name1节点 |
// | 从全局节点中选取节点,随便哪个位置 | //div | 从全局选取div节点 |
@ | 根据节点属性来获取节点 | //@a[href] | 选取全部a标签带href 的节点 |
. | 当前节点 | ./a | 从当前节点下往下查找a 节点 |
.. | 当前节点的父节点 | ./../div | 选择当前节点的父节点div |
- 2、谓语
谓语是用来找出某个特定的节点或者包括某个指定的值的节点,被嵌套在方括号中
路径表达式 | 描素 |
---|---|
//div[@id="box"]/div[1] | 获取id为box下第一个div子元素 |
//div[@id="box"]/div[last()] | 获取id为box下最后一个div子元素 |
//div[@id="box"]/div[position() < 3] | 获取id为box下面div前面2个字元素 |
//div[@price] | 选取拥有price属性的div元素 |
//div[@price=10] | 选取拥有price=10的div元素 |
- 3、通配符
类似.在正则中表示任意字符的意思,但是在
xpath
中是用*
表示
通配符 | 描素 | 示例 | 结果 |
---|---|---|---|
* | 匹配任意节点 | //div/* | 获取div下面所有子元素 |
@* | 匹配节点中任何属性 | //div[@*] | 获取带属性的div元素 |
4、匹配多路径
//div/a | //div/img # 表示获取div下面的a节点及div下面的img节点
5、关于部分匹配的
response.xpath("//input[start-with(@id,'fuck')]") # 匹配id以fuck开头的元素,id='fuckyou' response.xpath("//input[ends-with(@id,'fuck')]") # 匹配id以fuck结尾的元素,id='youfuck' response.xpath("//input[contains(@id,'fuck')]") # 匹配id中含有fuck的元素,id='youfuckyou' # 注:上面写的是@id是根据id来的,如果要根据class就写@class
6、关于不匹配的
response.xpath(".//span[not(@class)]") # 查找span标签不含class属性的 response.xpath(".//span[not(@class, 'box')]") # 查找span表示class不等于box的 response.xpath(".//span[not(contains(@class,'expire'))]") # 查找span标签中class中不包含expire的
7、使用多条件查找
and
response.xpath("//tr[not(contains(@class,'all')) and not(contains(@class,'tableRule'))]")
8、关于获取文本信息
tr.xpath('./td[last()]/text()')
9、获取节点属性
html.xpath('//tr//a/@href')