XPath(全称:XML Path Language)即 XML 路径语言,它是一门在 XML 文档中查找信息的语言,最初被用来搜寻 XML 文档,同时它也适用于搜索 HTML 文档。因此,在爬虫过程中可以使用 XPath 来提取相应的数据。

表达式

表达式 描述
node_name 选取此节点所有子节点
/ 表示从根节点选取,绝对路径。子代元素
// 从匹配选择的当前节点选择文档的节点,而不考虑他的位置,其第一个 / 表示根节点。相对路径。子孙代元素
. 选取当前节点
.. 选取当前节点的父节点
@ 选取属性值,通过属性值选取数据

一、 node_name 使用方法

例如
//input

二、 / 使用方法

1、绝对路径查询元素
例如
/div/div/input[@name="username"]
2、子代元素使用方法
例如
//div/input[@name="username"]

三、 // 使用方法

1、相对路径查询元素
例如
//div/input[@name="username"]
2、子孙代元素使用方法
例如
//div[@class="clearfix"]//input[@name="username"]

四、 .. 使用方法

1、相对路径查询父元素元素
例如
//input[@name="username"]/..

五、 . 使用方法

1、相对路径查询当前元素
例如
//input[@name="username"]/.

内建函数

Xpath 提供 100 多个内函数,这些函数给我们提供了很多便利,比如实现文本匹配、模糊匹配、以及位置匹配等,下面介绍几个常用的内建函数。

函数名称 说明
text() 文本匹配,表示取当前节点文本内容
contains() 文本模糊匹配

一、 text() 使用方法

1、在html中匹配文本为login的a标签
例如
//a[text()="login"]

二、 contains() 使用方法

1、在html中匹配文本中包含login的a标签
例如
//a[contains(text()="login")] //a[contains(@class="login")]

索引

一、 索引 使用方法

例如
(//a[contains(@class="login")])[1]

注意:XPath的索引是从1开始的,而非从0开始

XPath轴

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

一、使用方式

例如
(//a[contains(@class="login")])[1]//ancestor::

通配符

通配符 说明
* 匹配任意元素节点
@* 匹配任意属性节点
node() 匹配任意类型节点

一、使用方式

例如
//*[@name="login"]