Python爬虫--Xpath(二)

续上一篇:《Python爬虫--Xpath(一)》

3、Xpath轴

轴定义了所选节点与当前节点之间的树关系。

绝对位置路径、相对位置路径

绝对位置路径起始于正斜杠“/”,相对位置路径不是。

步(step)

位置路径包括一个或多个步,每个步均被斜杠分割:/step/step/...(绝对位置路径)、step/step/...(相对位置路径)。
步的语法:轴名称::节点测试[谓语]
Xpath轴中使用的节点集(轴名称):

轴名称 含义
child 选取当前节点的所有子元素
parent 选取当前节点的父节点
descendant 选取当前节点的所有后代元素(子 孙等)
ancestor 选取当前节点的所有先辈(父 祖父等)
descendant-or-self 选取当前节点的所有后代元素(子 孙等)以及当前节点本身
ancestor-or-self 选取当前节点的所有先辈(父 祖父等)以及当前节点本身
preceding-sibling 选取当前节点之前的所有同级节点
following-sibling 选取当前节点之后的所有同级节点
preceding 选取文档中当前节点的开始标签之前的所有节点
following 选取文档中当前节点的结束标签之后的所有节点
self 选取当前节点
attribute 选取当前节点的所有属性
namespace 选取当前节点的所有命名空间节点

下面来看一个例子:

<xml version="1.0" encoding="ISO-8859-1">
<classroom>
    <student>
        <id>1001</id>
        <name lang="en">marry</name>
        <age>20</age>
        <country>China</country>
    </student>
    <student>
        <id>1002</id>
        <name lang="en">jack</name>
        <age>25</age>
        <country>USA</country>
    </student>
    <teacher>
        <classid>1<classid>
        <name lang="en">tom</name>
        <age>50</age>
        <country>USA</country>
    </teacher>
</classroom>
实现效果 路径表达式
选取当前calssroom节点中子元素teacher节点 /classroom/child::teacher
选取所有id节点的父节点 //id/parent::*
选取所有以classid为子节点的祖先节点 //classid/ancestor::*
选取classroom节点下的所有后代节点 /classroom/descendant::*
选取所有以student为父节点的id元素 //student/descendant::id
选取所有classid元素的祖先节点及本身 //classid/ancestor-or-self::*
选择/classroom/student本身及所有后代元素 /classroom/student/descendant-or-self::*
选取/classroom/teacher之前的所有同级节点,结果就是选择了所有的student节点 /classroom/teacher/preceding-sibling::*
选取/classroom中第二个student之后的所有同级节点,结果就是选择了teacher节点 /classroom/student[2]/following-sibling::*
选取/classroom/teacher节点所有之前的节点(除其祖先外),不仅仅是student节点,还有里面的子节点 /classroom/teacher/preceding::*
选取/classroom中第二个student之后的所有节点,结果就是选择了teacher节点以及其子节点 /classroom/student[2]/following::*
选取student节点,单独使用没有什么意思,主要是跟其他轴一起使用,如ancestor-or-self,descendant-or-self //student/self::*
选取/classroom/teacher/name节点下的所有属性 /classroom/teacher/name/attrubute::*

猜你喜欢

转载自www.cnblogs.com/lykxbg/p/12006001.html