XPath 语法

XPath 核心语法全集(2025最新最精炼版)

记住这一篇就够你写 99% 的复杂定位了!

1. 基本路径写法(最重要的 5 种开头)

写法含义举例
/从根节点开始(严格一层一层)/html/body/div
//从任意位置开始找(全局搜索,最常用!)//div//input[@name='wd']
.当前节点.//a(从当前节点往下找所有 a)
..父节点..//span(往上级找)
*通配符,匹配任意元素节点//*[@id='kw']

2. 节点选择 + 谓词(方括号 [] 是灵魂)

语法含义实战例子
//div[1]第一个 div(错!容易踩坑)错!应该写成 (//div)[1]
(//div)[1]正确:所有 div 中的第 1 个正确写法
(//div)[last()]最后一个 div
(//div)[last()-1]倒数第二个
(//div)[position()>3]从第 4 个开始的所有 div
//div[@class='item']class 等于 item 的 div
//div[contains(@class,'item')]class 包含 item(最常用!)
//a[starts-with(@href,'https')]href 以 https 开头
//input[not(@disabled)]没有被禁用的输入框

3. 按文本内容定位(爬虫最爱)

写法说明
//a[text()='新闻']文本完全精确等于“新闻”(不能有空格)
//a[contains(text(),'新闻')]文本包含“新闻”(只看第一个文本节点)
//a[contains(.,'新闻')]推荐!整个元素所有文本拼接后包含“新闻”
//*[normalize-space()='登录']去掉前后空格、换行后等于“登录”(最稳!)
//*[contains(normalize-space(),'立即购买')]包含关键词,忽略空格换行

4. 轴(Axis)—— 关系定位大杀器(背会就无敌)

轴名称含义最常用写法
child::直接子节点(可省略)//ul/child::li//ul/li
parent::直接父节点//span/parent::div
ancestor::所有祖先节点//span/ancestor::div[1](最近的 div)
ancestor-or-self::所有祖先 + 自己
preceding-sibling::同层之前的所有兄弟//li[3]/preceding-sibling::li
following-sibling::同层之后的所有兄弟//div/following-sibling::div[1]
following::当前节点之后所有节点(不限层级)//input[@id='kw']/following::input[1]
preceding::当前节点之前所有节点
descendant::所有后代(// 的本质)//div/descendant::a//div//a
descendant-or-self::所有后代 + 自己//div//a 的完整写法
self::自己//div[self::div[@class='active']]

5. 运算符和函数(最常用的 10 个)

类型函数/运算符用途举例
字符串contains(字符串, '子串')contains(@class,'btn')
starts-with(字符串, '前缀')starts-with(@id,'login_')
normalize-space()去首尾空格和换行,最常用!
string()把节点转成字符串(常用于取价格)
数字position()当前位置
last()最后一个
count(节点集)统计数量
逻辑andornot()[@type='text' and @name='wd']
节点集合|并集://input | //button

6. 终极语法速查表(贴在桌边的那张纸)

// 从任意位置找
/  从根开始(严格层级)
.  当前节点
.. 父节点
*  通配任意元素
@  属性
text()          → 第一个文本节点
.               → 当前节点所有文本拼接(推荐用于 contains)
normalize-space() → 干净文本
(position())    → 位置
[last()]        → 最后一个
[contains(@class,'abc')]      → class 包含 abc
[starts-with(@id,'login')]    → id 以 login 开头
[not(@disabled)]              → 没被禁用
(//div[@class='item'])[3]     → 所有 item 中的第 3 个(一定要加括号!)

掌握上面所有内容,你已经进入 XPath 前 5% 高手行列!
接下来只需要多练,遇到任何网页定位难题,把 HTML 片段发给我,我 10 秒给你写出最稳的 XPath。

要不要现在来 10 道经典实战题,直接上手练?

文章已创建 2783

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部