python爬虫系列之 xpath语法

Python/Go 林涛 6956℃ 0评论

# XPath 基础表达式:

/node       表示在xml文档的根目录查找结点名称为node的结点
./node      表示在当前结点下查找结点名称为node的结点
//node      表示在xml文档中递归查找结点名称为node的节点
//*      表示在xml文档中查询所有的结点,但是排除文本节点
//node()      表示在xml文档中查询所有结点,包含文本节点
//text()      表示在xml文档中递归查找所有的文本节点
//*/text()[contains(., ‘test’)]      表示在xml文档中递归查找所有结点,条件为该结点的文本节点包含”test”
//node[@id]      表示在xml文档中递归查找结点名称为node的结点,条件为该结点必须含有id属性
//node[id]      表示在xml文档中递归查找结点名称为node的结点,条件为该结点必须含有结点名称为id的结点
//nodes[node/id]      表示递归查找nodes结点,条件为nodes结点下必须有node结点,且node结点下必须有id结点
//nodes[@id]/node[id]      表示递归查找含有id属性的nodes结点下的node结点,条件为node结点下必须含有id结点
//nodes[@id]/node[0]      表示递归查找含有id属性的nodes结点下的第一个node结点
//nodes[@id]/node[last()]      表示递归查找含有id属性的nodes结点下的最后一个node结点
//nodes/node[position() < 4]      表示递归查找nodes结点下索引小于4的node结点
//nodes[@id]/node[position() < last()]      递归查找含有id属性的nodes结点下除最后一个结点外的node结点
/nodes/child::node()[name()=’node’]      表示查找nodes结点下结点名称为node的子结点
/nodes/child::node      等同于/nodes/node表示查找nodes下的node子结点
/nodes/node/attribute::id      等同于/nodes/node/@id表示查找nodes结点下的node结点的id属性
//nodes[@id=’1001′]/node[starts-with(@id, ‘1’)]      表示查找id属性为1001的nodes结点下的id属性以1开头的node结点
//@*[ends-with(., ‘1’)]      表示查找以1结尾所有属性
(//* | //@*)[substring(name(), 1, 5) = ‘class’]      查找所有结点名称或属性名称的1到5之间的字符等于’class’的结点
//node[@attr!=’-2′ and @attr!=’2′]      查找所有node节点,其attr属性不等于2和-2

# XPath 文档轴用途:

self      选择当前节点
parent      选择当前节点的父节点
child      选择当前节点的所有子节点
attribute      选择当前节点的所有属性
ancestor      选择当前节点的所有祖先,包括父节点、父节点的父节点等等
ancestor-or-self      选择当前节点的祖先以及当前节点本身
descendant      选择当前节点的所有后代,包括子节点、子节点的子节点等等
descendant-or-self      选择当前节点的后代以及当前节点本身
preceding      选择整个文档中出现在当前节点前面的所有节点
preceding-sibling      选择文档中出现在当前节点前面的所有同胞节点(即与当前节点同级的节点)
following      选择整个文档中出现在当前节点后面的所有节点
following-sibling      选择文档中出现在当前节点后面的所有同胞节点(即与当前节点同级的节点)
namespace      选择当前节点的所有名称空间节点

1.2 常用规则

获取文本
a/text()       获取 a 下的文本
a//text()       获取 a 下所有元素的文本
//a[text()=’下一页’]       获取文本为下一页的 a 元素

获取属性
nodename        选取此节点的所有子节点
/       从当前节点选取直接子节点
//       从当前节点选取子孙节点
.       选取当前节点
..       选取当前节点的父节点
@       选取属性
*       匹配任何元素节点
@*       匹配任何属性节点
node()       匹配任何类型的节点

如需转载请注明: 转载自26点的博客

本文链接地址: python爬虫系列之 xpath语法

转载请注明:26点的博客 » python爬虫系列之 xpath语法

喜欢 (0)
发表我的评论
取消评论

表情