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

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 写法。

http://www.cnnetsun.cn/news/9999.html

相关文章:

  • 军事图像分类检测数据集介绍-351张图片 军事身份识别 安全检查辅助 智能监控系统 军事训练分析 历史军事影像分析
  • 人机环境系统智能是新理科与新文科的融点
  • 【字节开源Golang框架Eino】技术详解:架构原理+实战落地+避坑指南(附代码)
  • UE5 材质-22:
  • WebRTC 中的临界锁实现:从 CritScope 到 RAII 机制的深度解析
  • Mistral AI发布Magistral 1.2:24B参数轻量级模型重构多模态推理范式
  • Linux内核伙伴系统(Buddy System)原理详解
  • Universal x86 Tuning Utility终极指南:轻松解锁硬件性能的秘密武器
  • 基于三电平逆变器的有源滤波APF设计及Matlab/Simulink仿真
  • NVIDIA显卡深度调优指南:解锁隐藏性能的完全攻略
  • B站视频转文字完整指南:一键提取语音内容神器
  • 5步搞定Blender 3MF插件:从安装到高效3D打印工作流
  • Vue-Office Excel预览异常排查:从空白页面到完美渲染的完整指南
  • SQL SELECT:向数据库“点菜”的神奇指令
  • 深度学习之常用激活函数
  • 2023年IEEE TIV,GA-LNS算法+直升机救援调度,深度解析+性能实测
  • xshell的一个会话的连接的ip地址在哪里修改?
  • 【活动总结】创药沙龙第一期:ADC药物研发的挑战与机遇成功举办
  • 如何用免费工具3分钟终极优化Windows右键菜单:告别杂乱,提升300%操作效率
  • Day25
  • 工具 | netcat, netstat
  • AI的下半场:智能体(Agent)将如何重塑我们所有的应用
  • soular全面介绍(4) - 通过soular工作台聚合TikLab所有工具链
  • R-Zero:从零数据自进化推理大语言模型
  • 弹~性布局
  • Wan2.2-T2V-A14B在地震波传播模拟教学中的科学准确性
  • Day 36 MLP神经网络的训练
  • B站视频下载终极指南:免费工具DownKyi完整使用教程
  • 搞懂“元数据”:给数据办一张“身份证”
  • 04_C 语言进阶之避坑指南:多重 if-else 及多重条件混乱 —— 让逻辑不再 “绕迷宫”