news 2026/5/2 20:42:26

100 天学会爬虫 · Day 8:如何用 XPath 高效定位网页元素?(爬虫最常用解析方式之一)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
100 天学会爬虫 · Day 8:如何用 XPath 高效定位网页元素?(爬虫最常用解析方式之一)

在爬虫开发中,解析 HTML 的方式主要有三种:

  • 正则表达式(不推荐新手使用)

  • BeautifulSoup(简单易用)

  • XPath(最强大、最精确)

今天我们要学习的是爬虫工程师最喜欢的解析方式之一:

XPath —— 提取网页结构最强大的工具

只要你掌握 XPath,再复杂的 HTML 都能被你快速解析。


🔍 一、XPath 是什么?

XPath 全称:

XML Path Language(XML 路径语言)

虽然名字里带 XML,但它同样适用于HTML

它的作用是:

  • 通过路径查找节点

  • 精确定位网页元素

  • 快速提取文本、属性、子节点

你可以把 XPath 看成网页的“地图导航”:

从 /html/body/div[1]/h1 找到标题节点

非常直观、非常精确。


🧭 二、为什么爬虫必须掌握 XPath?

理由如下:

✔ 1. BeautifulSoup 不够精确

遇到多层嵌套或重复节点时,XPath 的定位能力远超 BeautifulSoup。

✔ 2. 数据结构复杂的网站,XPath 更容易处理

尤其是电商站点、资讯站点、层级列表网站。

✔ 3. XPath 语法非常统一

你学会一次,可以用一辈子。

✔ 4. lxml + XPath 的解析速度非常快

适合大规模爬虫工程。


🔧 三、用 lxml + XPath 的基础用法

安装 lxml:

pip install lxml

解析 HTML:

from lxml import etree html = etree.HTML("<html>...</html>") result = html.xpath("你的 XPath 表达式")

result会返回一个列表,包含匹配到的节点或文本。


🧪 四、XPath 常用语法(爬虫最常用 Top 10)


① 选取所有某标签节点

//h1 //div //a

② 选取具体 class 的标签

//h1[@class="title"]

③ 选取含有某部分 class 的节点(超常用)

//div[contains(@class, "item")]

适用于 class 多个值的情况:

<div class="item active main">

④ 选取文本内容

//h1/text()

⑤ 选取属性(如 src、href)

//img/@src //a/@href

⑥ 索引定位(从 1 开始)

//ul/li[1] # 第一个 li //ul/li[last()] # 最后一个 li

⑦ 选取子节点(/)

//div/h1

⑧ 选取任意深度节点(//)

//div//span

⑨ 选取包含文本的节点

//a[contains(text(), "Python")]

⑩ 多条件筛选(进阶)

//div[@class="item" and @data-id="123"]

🔍 五、实战示例:解析文章标题与内容

假设你抓取一个网页,结构如下:

<div class="article"> <h1 class="title">Python 爬虫入门</h1> <p class="summary">这是简介内容</p> </div>

XPath 提取:

提取标题:

title = html.xpath('//h1[@class="title"]/text()')

提取简介:

summary = html.xpath('//p[@class="summary"]/text()')

提取整个文章块:

article = html.xpath('//div[@class="article"]')[0]

🧩 六、解析列表结构(爬虫最常见场景)

网页中常见:

新闻列表
商品列表
评论列表
视频列表
结构可能是:

<ul class="news"> <li> <a href="/1.html">新闻 1</a> </li> <li> <a href="/2.html">新闻 2</a> </li> </ul>

提取所有标题:

titles = html.xpath('//ul[@class="news"]/li/a/text()')

提取所有链接:

links = html.xpath('//ul[@class="news"]/li/a/@href')

XPath 对列表解析极其强大。


🛠 七、如何在浏览器中获取 XPath?

Chrome 可以自动生成 XPath:

  1. 打开 Elements 面板

  2. 右键节点

  3. 点击Copy → Copy XPath

但注意:

  • 自动 XPath不够简洁

  • 很多路径层级过深

  • 建议自行优化

例如自动生成:

/html/body/div[2]/div[3]/div/h1

建议手写:

//h1[@class="title"]

更通用、更不易失败。

🔦 八、XPath 解析失败的常见原因


❌ 1. 页面由 JS 渲染(HTML 中没有数据)

此时应抓 Ajax 或使用 Selenium/Playwright。


❌ 2. class 有多个值,你却写成完整匹配

例如:

<div class="item active">

应写:

//div[contains(@class, "item")]

❌ 3. 标签层级不固定

//更稳妥。


❌ 4. 忘记加 text() 或 @href


✅ 总结

今天你学到了:

  • XPath 是最强大的 HTML 解析工具之一

  • 支持精确定位节点、属性、文本

  • 非常适合爬虫解析复杂网页

  • Chrome 可以辅助生成 XPath

  • XPath 常见的十大语法

  • XPath 在列表结构中的应用

  • XPath 失败的常见原因及解决方案

掌握 XPath 是你成为爬虫开发者的重要里程碑,一旦熟练,再复杂的页面都能迎刃而解。

如果你在写 XPath 时遇到:

  • 结构太复杂难以定位

  • 多层嵌套不知如何写路径

  • text() 提取不到内容

  • Chrome 生成的 XPath 不能用

  • 每个节点结构都不固定

可以加我微信cpseagogo,我可以帮你一起分析 HTML 结构和 XPath 写法。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 6:08:40

有什么近视防控的办法是切实有效,并且家长真的能「落地执行」的?

对于家长而言&#xff0c;近视防控最棘手的并非知晓“该做什么”&#xff0c;而是找到“能坚持做”的方法。很多理论上有效的措施&#xff0c;往往因需要额外付出大量时间、孩子不配合或操作复杂而难以落地。一、核心手段&#xff1a;眼调节训练灯 —— 照明即训练&#xff0c;…

作者头像 李华
网站建设 2026/5/1 23:08:25

WebRTC 信号槽机制:当 C++ 遇上观察者模式,代码解耦的优雅之道

WebRTC 信号槽机制&#xff1a;当 C 遇上观察者模式&#xff0c;代码解耦的优雅之道 本文所有源码均基于 WebRTC M85 (branch-heads/4183) 版本进行分析。 一、引言&#xff1a;一个让人困惑的 connect 调用 在阅读 WebRTC 源码时&#xff0c;你可能会频繁遇到这样的代码&…

作者头像 李华
网站建设 2026/5/1 5:05:23

【R语言气象预测实战】:掌握极端天气事件预警的5大核心模型

第一章&#xff1a;Shell脚本的基本语法和命令Shell 脚本是 Linux 和 Unix 系统中自动化任务的核心工具&#xff0c;它允许用户通过编写一系列命令来执行复杂的操作。一个 Shell 脚本通常以 #!/bin/bash 开头&#xff0c;称为 shebang&#xff0c;用于指定解释器路径。脚本的编…

作者头像 李华
网站建设 2026/5/1 11:15:05

java计算机毕业设计全周期“大思政课”评价平台 基于SpringBoot的思政课程全过程评价与反馈系统 JavaWeb高校思想政治理论课教学质量跟踪平台

计算机毕业设计全周期“大思政课”评价平台14u9q9&#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。当“思政课”不再是一锤定音的期末分数&#xff0c;而是贯穿课前、课中、课后、…

作者头像 李华
网站建设 2026/5/1 11:12:39

行业动态:人工智能技术如何重塑现代企业运营模式

行业动态&#xff1a;人工智能技术如何重塑现代企业运营模式 【免费下载链接】ChronoEdit-14B-Diffusers 项目地址: https://ai.gitcode.com/hf_mirrors/nvidia/ChronoEdit-14B-Diffusers 在当今数字化浪潮席卷全球的背景下&#xff0c;人工智能技术正以前所未有的速度…

作者头像 李华
网站建设 2026/5/1 11:14:05

接口测试:Charles 抓包工具证书配置

Charles 抓包工具在开始使用之前&#xff0c;需要完成一系列的设置。本章节将介绍具体配置方式。 Charles 基础设置 证书安装 电脑证书配置 Help -> SSL Proxying -> Install Charles Root Certificate Mac 系统安装证书 Help -> SSL Proxying -> Install Charl…

作者头像 李华