• Python爬虫--Xpath(一)


    Xpath

    Xpath是一门在XML文档中查找信息的语言,被用于在XML文档中通过元素和属性进行导航,也可以用在HTML文档中工作。Python爬虫开发中,经常使用Xpath查找提取网页中的信息,因此Xpath非常重要。

    1、Xpath节点

    在Xpath中,XML文档被作为节点树来对待的,有7种类型节点:

    1. 元素
    2. 属性
    3. 文本
    4. 命名空间
    5. 处理指令
    6. 注释
    7. 文档(根)节点

    来看一个例子:

    <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>
    </classroom>
    

    <classroom>是文档节点
    <id>1001</id>是元素节点
    lang="en"是属性节点
    marry是文本节点
    节点关系包括父(parent)、子(children)、同胞(sibling)、 先辈(ancestor)、后代(descendent)。

    2、Xpath语法

    路径表达式

    Xpath使用路径表达式来选取XML文档中的节点或节点集。节点是沿着路径path或步steps来选取的。
    常用的路径表达式:

    表达式 描述
    nodename 选取节点的所有子节点
    / 从根节点选取
    // 选取任意位置的某个节点
    . 选取当前节点
    .. 选取当前节点的父节点
    @ 选取属性

    看一个例子:

    <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>
    </classroom>
    
    实现效果 路径表达式
    选取classroom的所有子节点 classroom
    选取根元素classroom /classroom
    选取属于classroom的子元素的所有student元素 classroom/student
    选取所有sudent子元素,而不管它们在文档中的位置 //student
    选择属于classroom元素的后代的所有student元素,不管它们位于classroom之下的什么位置 classroom//student
    选取名为lang的所有属性 //@lang
    谓词

    通过谓词来选取某个特定的节点或者包含某个指定值的节点。
    使用中括号[]来表示谓词:

    实现效果 路径表达式
    选取属于classroom子元素的第一个student元素 /classroom/student[1]
    选取属于classroom子元素的最后一个student元素 /classroom/student[last()]
    选取属于classroom子元素的倒数第二个student元素 /classroom/student[last()-1]
    选取classroom子元素的最前面的两个studaent元素 /classroom/student[position()❤️]
    选取所有拥有lang属性的name元素 //name[@lang]
    选取所有拥有lang属性并且值为“en”的name元素 //name[@lang='en']
    选取classroom元素的所有studnet元素,并且其age元素的值大于20 /classroom/student[age>20]
    选取classroom元素中的student元素的所有name元素,并且其age元素的值大于20 /classroom/student[age>20]/name
    通配符
    • 使用通配符“*”匹配未知的元素
    • 使用通配符“|”一次选取多条路径
    实现效果 路径表达式
    选取classroom元素的所有子元素 /classroom/*
    选取文档中的所有元素 //*
    选取所有带有属性的name元素 //name[@*]
    选取student元素的所有name元素和age元素 //student/name | //student/age
    选取属于classroom元素的student元素的所有name元素,以及文档中所有age元素 /classroom/student/name | //age

    作者:lykxbg —— 来一块小饼干

    出处:http://www.cnblogs.com/lykxbg/

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    Windbg DUMP
    NET媒体文件操作组件TagLib
    NET Framework、.NET Core、Xamarin
    面向切面编程
    微服务
    NET Core
    Yeoman generator
    Service Fabric
    Vue.JS 2.x
    CoreCLR
  • 原文地址:https://www.cnblogs.com/lykxbg/p/12002936.html
Copyright © 2020-2023  润新知