xpath 升格用法
匹配当前节点下所有子节点 .//
1 | xpath('//div//') # div 当前节点 |
//
标签下的所有标签
匹配某标签的属性值 /@属性名称
1 | # 获取 input value |
匹配多个路径 |
1 | xpath('//div/text() | //div/div/text()') |
按属性匹配 @
1 | # 获取所有id="test"的所有文本内容 |
匹配不包含某个属性的标签 not
1 | # 多用于表格中匹配中不包含表头信息的数据 |
匹配包含多个属性的标签 and
1 | # 匹配所有的tr中不包含 tbhead 属性 和包含 head 的tr标签 |
匹配包含不同属性的名称相同的标签 or
1 | # 匹配包含class="speedbar" 或者 class="content-wrap" 的标签 |
将对象还原为字符串 etree.tostring()
1 | # 将匹配到的对象,作为etree.tostring()的参数即可, 注: 返回字符串 |
按轴(Axes)匹配
选取当前节点的所有子元素 child
1 | # 获取div下的tr的标签 |
选取当前节点的所有属性 attribute
1 | # 获取div标签所有的属性值 |
ancestor:父辈元素 / ancestor-or-self:父辈元素及当前元素
1 | # 获取父辈元素的div的所有属性值, 在不好定位的情况下,通过孩子标签定位,这种方法可以用 |
descendant:后代 / descendant-or-self:后代及当前节点本身
1 | # 获取孩子元素的div的所有属性值,感觉鸡肋 |
选取当前节点的所有命名空间节点 namespace
1 | xpath('//div[@id="test"]/namespace::*') |
定位 position
1 | # 和通过下标定位一样, 方法鸡肋 |
Xpath 函数
统计数量 count
1 | # 统计符合要求节点的数量,返回字符串 |
字符串拼接 concat
1 | # 统计出来的两个内容的字符串进行“ + ”处理,返回字符串 |
解析当前节点下的字符 string
1 | # string()直解析匹配的第一个标签的值, 注: 返回字符串 |
获取当前节点的节点名称 local-name
1 | # 返回当前属性的节点名称, 注: 返回字符串 |
以指定的字符开头 starts-with
1 | # starts-with定位属性值以8开头的li元素 |
小于 <
1 | # 匹配所有tr标签属性info小于200的内容 |
根据指定的文本内容选择
1 | # 指定的文本内容可以是文本内容的部分, 也可以是全部 |
Via