XPath笔记

XPath(XML Path Language,XML 路径语言)是一种用于在 XML 或 HTML 文档中定位和选取节点的查询语言 ,由 W3C(万维网联盟)制定为标准。它的核心思想是把文档看作一棵节点树,像文件系统的路径一样,在树中导航并精准定位目标元素。

一、核心基础:节点选取语法

这是 XPath 定位的底层规则,用于指定节点的查找路径,是所有操作的基础:

表格

表达式 核心描述 实战示例 示例说明
nodename 选取该节点的所有子节点 div 选取当前节点下所有<div>子标签
/ 层级分隔 / 绝对路径(直接子节点) /html/body/div 从根节点开始,选<html><body>下的直接<div>子节点
// 全局选取(任意位置的节点) //div 选取整个文档中所有<div>标签(无视层级)
. 选取当前节点(相对定位) ./span 选取当前节点下的直接<span>子节点
.. 选取父节点 //span/.. 选取所有<span>标签的父节点
@ 选取属性(基础) //div[@id] 选取带有id属性的所有<div>标签

二、进阶筛选:谓语(Predicates)

通过[]包裹条件实现精准过滤,是 XPath 定位的核心能力,适配各类精准匹配场景:

表格

表达式类型 示例 示例说明 补充说明
位置索引 //head/meta[1] 选取<head>下第一个<meta>标签 索引从 1 开始(非 0),是高频易错点
末尾定位 //ul/li[last()] 选取<ul>下最后一个<li>标签 支持偏移:last()-1= 倒数第二个
位置范围 //ul/li[position()<3] 选取<ul>下前 2 个<li>标签 支持</>/=/<=/>=等运算符
属性存在性 //a[@href] 选取带有href属性的所有<a>标签 仅校验属性是否存在,不限制值
属性精确匹配 //div[@id='u1'] 选取id值为u1的所有<div>标签 字符串值需加单 / 双引号
属性模糊匹配 //a[contains(@href, 'cve')] 选取href包含cve的所有<a>标签 爬虫提取关联链接常用
属性开头匹配 //script[starts-with(@src, '//cdn')] 选取src//cdn开头的<script> 定位第三方资源常用
多条件联合 //input[@type='text' and position()=2] 选取第 2 个typetext<input> 支持and/or逻辑运算符

三、简化匹配:通配符(Wildcards)

用于 "未知节点 / 属性" 或批量选取场景,简化匹配规则:

表格

通配符 作用 示例 示例说明
* 匹配任意节点 //div[@id='u1']/* id=u1<div>下所有直接子节点(不限标签)
@* 匹配任意属性 //meta[@*] 选取带有任意属性的所有<meta>标签

四、批量选取:多路径联合(| 竖线)

你希望我重新整理 XPath 中 "多路径联合选取" 的知识点,这是 XPath 实现批量提取多个不相关节点集的核心能力,以下是结构化、贴合实战的详细解析:

1. 核心语法

多路径联合选取通过 |(竖线) 连接两个或多个独立的 XPath 表达式,最终返回所有表达式匹配结果的 "并集"(按节点在文档中的自然出现顺序排列)。

  • 语法格式:XPath表达式1 | XPath表达式2 | ... | XPath表达式N
  • 核心逻辑:多个路径无依赖关系,相当于 "同时选取满足任意一个路径的所有节点"。

2. 详细示例(从基础到进阶)

(1)基础示例:选取不同类型的标签

xpath

复制代码
//title | //meta | //h1
  • 作用:同时选取文档中所有<title><meta><h1>标签;
  • 适用场景:爬虫中批量提取网页基础信息(标题、元信息、主标题)。

(2)进阶示例:带筛选条件的多路径

xpath

复制代码
//div[@class='nav']/a | //ul[@id='menu']/li/a
  • 作用:
    • 第一部分:选取class="nav"<div>下所有<a>标签;
    • 第二部分:选取id="menu"<ul>下所有<li>中的<a>标签;
    • 最终:合并两部分结果,得到所有导航栏链接。
  • 适用场景:网页导航链接分散在不同标签结构中时,批量提取所有导航链接。

(3)结合谓语 / 通配符的多路径

xpath

复制代码
//a[contains(@href, 'https')] | //button[@type='submit']
  • 作用:同时选取所有带 HTTPS 链接的<a>标签、所有提交类型的<button>标签;
  • 适用场景:自动化测试中批量定位 "安全链接" 和 "提交按钮"。

3. 关键使用注意事项

  1. 结果排序 :合并后的节点按其在文档中的自然出现顺序 排列,而非表达式书写顺序;例:若<h1><title>前,//title | //h1的结果中<h1>会先出现。
  2. 路径独立性 :每个路径都是独立的,一个路径的语法错误会导致整个表达式失效;例://div[@class='nav'] | //ul[@id='menu'(缺少闭合括号)会整体报错。
  3. 去重特性 :若多个路径匹配到同一个节点,结果中仅保留一次(自动去重);例://div | //*[@class='box']若某个<div>刚好有class="box",只会出现一次。

五、实战补充:路径类型与避坑指南

1. 路径类型区分(爬虫 / 自动化首选)

  • 绝对路径:以/开头(如/html/body/div),稳定性差(页面结构变化易失效);
  • 相对路径:以./..开头(如./span),灵活性高(优先使用);
  • 全局路径:以//开头(如//div[@class='content']),兼顾精准与灵活。

2. 核心易错点

  • 索引规则:XPath 索引从 1 开始,而非编程中的 0;
  • 通配符范围:*仅匹配节点,@*仅匹配属性,不可混用;
  • 多路径逻辑:|是 "并集" 而非 "逻辑或",结果按文档顺序返回。

总结

  1. XPath 核心分为基础路径选取 (/、//、.、@)和进阶筛选(谓语、通配符、多路径),后者是精准定位的关键;
  2. 谓语[]支持位置、属性、多条件筛选,"索引从 1 开始" 是最易踩坑的点;
  3. 实际开发中优先使用「相对路径 + 谓语筛选」(如//div[@class='content']/p),兼顾灵活性和精准性。
相关推荐
桂花很香,旭很美2 小时前
Anthropic Agent 工程实战笔记(六)安全与生产
笔记·架构·agent
sponge'2 小时前
opencv学习笔记14:transformer
笔记·学习·transformer
xhyu613 小时前
【学习笔记】推荐系统 (4.召回:Deep Retrieval、其他召回通道、曝光过滤)
笔记·学习
桂花很香,旭很美4 小时前
Anthropic Agent 工程实战笔记(一)架构与选型
笔记·架构·language model
Aliex_git4 小时前
Sentry 私有部署和配置笔记
笔记·学习·sentry
qq_24218863324 小时前
金融AI反欺诈系统构建指南
人工智能·笔记·金融·课程设计
四谎真好看5 小时前
SSM学习笔记(SpringBoot篇)
spring boot·笔记·学习·学习笔记·ssm
宇木灵6 小时前
考研数学-高中数学回顾函数的微分day8(完结)
笔记·学习·考研·数学·函数·导数·微分
一个人旅程~6 小时前
《七重时间的织锦》-致初七
windows·经验分享·笔记·微信公众平台