Python

利用Xpath提取HTML节点

2018-03-28  本文已影响7人  苦逼李

目录


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的父节点

再看稍微复杂的情况

路径表达式 描述
/div/a 从根节点开始选取div节点下的a节点
/div/a[2]/img 从根节点开始选取div节点下的第二个a节点下的img节点
//div[@class="header-wrapper"] 选取所有属性class的值为header-wrapper的div节点

选取位置元素和属性

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

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

路径表达式 描述
/div/p/text() 选取p节点的文本内容
//div[contains(@class,"post")] 选取带有class属性且值包含“post”的所有div节点
/div/p[last()-1] 选取div下倒数第二个p节点 注:last()后的数字没有表示倒数第一

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

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

更新ing..

上一篇 下一篇

猜你喜欢

热点阅读