Xpath
常用规则
| 符号 | 描述 |
|---|---|
| nodename | 选取此节点的所有结点 |
| / | 选取当前结点的子节点 |
| // | 选取当前结点的子孙(子和孙)结点 |
| . | 选取当前节点 |
| .. | 选取当前节点的父节点 |
| /* | 选取所有结点 |
| @ | 选取属性 |
在使用的时候,常以//开头的Xpath规则来选择所有结点,后续再添加符号就行筛选.
在Xpath处理的时候先需要进行对文本进行处理,示例如下
from lxml import etree
html = etree.parse(text,etree.HTMLParser) ## text指的是html格式的文本
result = html.xpath(pattern) ##pattern值得是xpath pattern,选择的路径
属性
属性匹配
[@+属性],例如需要查找class = 'item1'的结点,直接使用
//[@class='item1']
属性获取
如果是要获取属性的话,直接@/属性标签就行,例如需要获得a标签的href属性,如下
//a/@href
属性多值匹配
面对有多个属性值的结点,如<a class = 'item1 item2'>,如果使用//a[@class='item1']就匹配不到这个文本.
可以使用contains方法,改成//a[contains(class,'item1')],那么就能匹配到该文本.
多属性匹配
如果我们想要获取的结点要满足多个属性,如既要class='item1',而且href='item2.html',那么就要使用多属性匹配,示例如下:
`//a[@class='item1' and @href='item2.htm']`
下面是XPath运算符及其解释
| 运算符 | 描述 | 示例 | 返回值 |
|---|---|---|---|
| or | 或 | class=’item1’ or class=’item2’ | 至少满足一个的结点 |
| and | 且 | class=’item1’ and class=’item2’ | 都满足的结点 |
| | | 计算两个节点集 | class=’item1’ | class=’item2’ | 返回所有拥有class=’item1’ 和 class=’item2’的节点集 |
按序选择
当同时匹配多个节点的时候,如果想要第某一个节点,使用中括号里面加入索引方法(数字代表第几个,last表示最后一个,可以加入布尔表达式,比如position()<4,就是返回第一个,第二个,第三个节点>)就能做到按序选择
节点轴选择
节点轴关键字::修饰关键字
这就是一个节点轴选择的格式
| 关键字 | 解释 |
|---|---|
| ancestor | 获取所有祖先节点 |
| attribute | 获取节点所有属性值 |
| child | 获取所有直接子节点 |
| descendant | 获取所有子孙节点 |
| following | 获取当且节点之后的所有节点 |
| following-sibling | 获取当前节点的所有同级节点 |