美文网首页Python
利用Xpath提取HTML节点

利用Xpath提取HTML节点

作者: 苦逼李 | 来源:发表于2018-03-28 21:31 被阅读7次

    目录

    • 什么是Xpath?
    • 常见的Xpath中节点及节点间的关系
    • Xpath路径表达式(节选)

    2018.3.28更新

    补充说明了 /(根节点的作用)

    说明了///的区别


    什么是Xpath?

    Xpath是XML-路径语言的简称。顾名思义,Xpath可以用于定位XML文本的节点,但实际上,Xpath也适用于定位HTML中的节点。

    节点及节点间的关系

    在HTML中,节点就是一个个HTML标签。分析节点间的关系也就是要清楚HTML文档中各标签间的关系。厘清这些关系对于书写Xpath路径表达式来说非常重要。

    节点间的关系(下面通过一段HTML代码说明:)

    <div class="header-wrapper">    
        <a href="http://www.baidu.com">
        <a href="http://blog.jobbole.com"><img src="xxx" alt="文章" /></a>
    </div>
    

    父节点(Parent)

    元素div是元素a的父节点;第二个元素a也是元素img的父节点。

    子节点(Children)

    元素a是元素div的子节点;元素img是子节点。

    兄弟/同胞节点(Sibling)

    兄弟节点在HTML中的地位相等,它们有相同的父节点。如上面例子中,两个a元素互为兄弟节点。

    先辈节点(Descendant)

    对于img元素来说,它的父节点(第二个a元素),和它的父节点的父节点(元素div)统称为img的先辈节点。在一个HTML文件中,先辈节点一般不唯一,比如这里的例子中,元素img的先辈节点包含两个元素。

    后代节点(Descendant)

    对于img元素来说,它的子节点(第二个a元素),和它的子节点的子节点(元素img)统称为div的后代节点。

    在使用Xpath中,搞清楚节点间的关系是非常重要的。

    Xpath路径表达式(节选)

    XPath 使用路径表达式来选取 XML 文档(或是HTML文档)中的节点或节点集。下面列举一些常见的路径表达式。

    路径表达式 描述
    /div/p 选取div下的所有p节点(p必须是div的子节点)
    /div//a 选取div下所有a节点而不考虑其位置(a标签只要是div的子孙节点即可)
    @class 选取名为class的属性
    /div/.. 选取div的父节点
    • / 表示从根节点开始(html文件中是html节点),而根节点后不一定是div节点,但为了表达简洁,省略了div节点前的部分路径表达式,后面也是。实际使用时需要注意。

    再看稍微复杂的情况

    路径表达式 描述
    /div/a 从根节点开始选取div节点下的a节点
    /div/a[2]/img 从根节点开始选取div节点下的第二个a节点下的img节点
    //div[@class="header-wrapper"] 选取所有属性class的值为header-wrapper的div节点
    • 在节点后加上带有数字的方括号,可以根据兄弟节点在文档中出现的先后次序选择元素(数字1为第一个依次类推)。如果说我想取一个元素,而它从倒数来看更加方便,那该如何取呢?后面将说明这种方法。
    • 通过在节点后加上带有属性名-值对的方括号,可以筛选出需要的节点。属性值的写法为:@属性名=“属性值”

    选取位置元素和属性

    路径表达式 描述
    //*/di 选取文档中所有元素
    //@* 选取文档中所有带属性的元素

    最后介绍Xpath中一些常用的函数

    路径表达式 描述
    /div/p/text() 选取p节点的文本内容
    //div[contains(@class,"post")] 选取带有class属性且值包含“post”的所有div节点
    /div/p[last()-1] 选取div下倒数第二个p节点 注:last()后的数字没有表示倒数第一
    • 适用路径表达式时必须将其包围在一对单引号(或双引号)中。如果路径表达式外是双引号,则路径表达式中的属性值必须用单引号;如果路径表示外是单引号,则路径表达式中的属性值必须用双引号,以此来避免歧义。
    • contains函数在提取一个带有多值属性的节点时很有帮助

    选取多个元素——在路径表示中使用'|'

    路径表达式 描述
    /div/a | /div/p 选取div下的a节点和div下的p节点

    更新ing..

    相关文章

      网友评论

        本文标题:利用Xpath提取HTML节点

        本文链接:https://www.haomeiwen.com/subject/xbzucftx.html