Xpath的使用


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 获取当前节点的所有同级节点

Author: Dovahkiin
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint policy. If reproduced, please indicate source Dovahkiin !
  TOC