当前位置: 首页 > news >正文

XPath:从入门到能用

1. 什么是 XPath?

XPath 全称 XML Path Language,是一种用于在 XML(Extensible Markup Language)或 HTML 文档中查找节点的语言。
它常用于:

  • Web 爬虫(如 Scrapy、lxml)
  • 自动化测试(如 Selenium、Appium)
  • XML 数据解析

如果把 HTML 看作一棵“标签树”,XPath 就是按照一定规则在这棵树中找到你想要的元素。


2. 基本语法结构

XPath 的路径书写类似于文件路径:

符号含义
/从根节点开始,获取直接子节点
//从当前节点开始,获取所有符合条件的子孙节点
.当前节点
..父节点
@选取属性

例子:

/html/body/div

表示 HTML → body → div 的路径(只找直接子节点)。

//div

表示文档中所有<div> 元素,不管层级。

//div[@class="container"]

表示文档中所有 class 属性值为 container<div> 标签。


3. 常用节点选择方式

3.1 按标签名查找

//p                 # 找出所有<p>标签
/html/body/h1       # 找根路径下的<h1>

3.2 按属性查找

//div[@id="main"]                # id=main 的<div>
//input[@name="username"]        # 表单中 name=username 的<input>

3.3 属性值模糊匹配

//div[contains(@class, "main")]     # class 中包含 main
//a[starts-with(@href, "https")]    # href 以 https 开头

3.4 按文本内容查找

//a[text()="登录"]                        # 文本正好是“登录”
//a[contains(text(), "注册")]              # 文本包含“注册”

3.5 按层级关系查找

//div/span                 # div 的子孙节点 span
//div/*                    # div 的所有直接子元素

4. 位置匹配

有时候多个节点都匹配,我们只要第几个:

(//div[@class="item"])[1]   # 第一个匹配的 item
(//li)[last()]              # 最后一个<li>

5. 获取节点内容

在 HTML 解析中(以 Python + lxml 为例):

from lxml import etreehtml = """
<html><body>
<div id="main">Hello</div>
<a href="https://example.com">点击</a>
</body></html>
"""tree = etree.HTML(html)# 1. 获取文本
text = tree.xpath('//div[@id="main"]/text()')
print(text)  # ['Hello']# 2. 获取属性值
href = tree.xpath('//a/@href')
print(href)  # ['https://example.com']

6. 综合案例

假设 HTML:

<ul><li class="item">苹果</li><li class="item">香蕉</li><li class="item">橙子</li>
</ul>

获取所有水果名:

//li[@class="item"]/text()

返回:['苹果', '香蕉', '橙子']

获取第二个水果名:

(//li[@class="item"]/text())[2]

返回:香蕉


7. XPath 与 CSS 选择器的对比

  • CSS 语法更短,适合前端开发(如 div#main > p.title)。
  • XPath 功能更强大,比如可以:
    • 按文本内容查找
    • 按数字位置查找
    • 结合逻辑条件(and / or)

很多时候,两者可以互换使用,但在爬虫和解析中,XPath 的自由度更高。


8. 常用技巧总结

  • // 可以从任意位置查找节点,最常用。
  • [ ] 用于添加过滤条件(属性、文本、位置)。
  • @attr 获取属性值,text() 获取标签的纯文本。
  • contains()starts-with() 常用于模糊匹配。
  • ( ... )[n] 取第 n 个匹配结果。

小练习:
给你一段 HTML:

<div class="news"><h2>今日热点</h2><p class="summary">今天的头条是关于...</p><a href="/readmore">阅读全文</a>
</div>

要求写出 XPath 表达式:

  1. 取出标题文字 今日热点
  2. 获取摘要文字
  3. 获取阅读全文链接的 href

答案参考:

1. //div[@class="news"]/h2/text()
2. //p[@class="summary"]/text()
3. //div[@class="news"]/a/@href

文章转载自:

http://Nu9ro63Z.xcszL.cn
http://xeiy2cGK.xcszL.cn
http://B5SWhaBD.xcszL.cn
http://a0JRusPu.xcszL.cn
http://Sx4i13PX.xcszL.cn
http://lat2xqMS.xcszL.cn
http://DqObcCGh.xcszL.cn
http://3dzHAyGl.xcszL.cn
http://AGEMVd8j.xcszL.cn
http://royBtXdP.xcszL.cn
http://33OBBosa.xcszL.cn
http://bRmgs0Km.xcszL.cn
http://zNH8tJhC.xcszL.cn
http://3OZ3L0VC.xcszL.cn
http://1R9U7u3S.xcszL.cn
http://HIyXtfU8.xcszL.cn
http://jIlSqYhJ.xcszL.cn
http://jbF2LboW.xcszL.cn
http://hotLFuRt.xcszL.cn
http://WMhSQJtI.xcszL.cn
http://ivFlSg7y.xcszL.cn
http://SofSOPHX.xcszL.cn
http://AeDjnGg0.xcszL.cn
http://OGXRJWTT.xcszL.cn
http://hXg38bkL.xcszL.cn
http://0OlTOgun.xcszL.cn
http://VjXdq1ew.xcszL.cn
http://K81kfFUA.xcszL.cn
http://o4KhzCB9.xcszL.cn
http://hdvb7amP.xcszL.cn
http://www.dtcms.com/a/373736.html

相关文章:

  • Kotlin协程 -> Job.join() 完整流程图与核心源码分析
  • [优选算法专题二滑动窗口——串联所有单词的子串]
  • VR森林防火模拟进行零风险演练,成本降低​
  • 玩转Docker | 使用Docker部署Kener状态页监控工具
  • Oracle 官网账号登不了?考过的证书还能下载吗?
  • Oracle 数据库高级查询语句方法
  • WSD3075DN56高性能MOS管在汽车电动助力转向系统(EPS)中的应用
  • 1.1 汽车运行滚动阻力
  • LinuxC++项目开发日志——高并发内存池(3-thread cache框架开发)
  • Android 自定义 TagView
  • 下沉一线强赋能!晓商圈多维帮扶护航城市共建者
  • YOLO12 改进、魔改|通道自注意力卷积块CSA-ConvBlock,通过动态建模特征图通道间的依赖关系,优化通道权重分配,在强化有效特征、抑制冗余信息
  • 提升数据库性能的秘密武器:深入解析慢查询、连接池与Druid监控
  • 中间件的日志分析
  • 机器宠物外壳设计的详细流程
  • OpenCV C++ 二值图像分析:从连通组件到轮廓匹配
  • Java分页 Element—UI
  • Flow-GRPO: Training Flow Matching Models via Online RL
  • C#中解析XML时遇到注释节点报错
  • 联邦学习辅导流程
  • MySQL MVCC原理
  • QSS加载失败的奇葩问题--已解决
  • 一体化伺服电机在管道焊缝检测爬行机器人中的应用案例
  • flowable发起申请后无法查看申请记录
  • 鸿蒙实现APP和网页跳转方案总结
  • 【数据结构与算符Trip第2站】稀疏数组
  • 国产EtherCAT从站芯片FCE1353与N32G435 MCU功能板测试流程
  • 0908 C++标准模板库和异常处理
  • 【PostgreSQL内核学习:基于 ExprState 的哈希计算优化—— GROUP BY 与 SubPlan 的性能提升】
  • Hive基础简介