news 2026/4/16 10:44:16

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/4/16 10:42:26

从零实现工具注册,手把手构建可扩展的Dify Agent插件系统

第一章&#xff1a;Dify Agent工具注册机制概述Dify Agent 是 Dify 平台用于连接外部系统与智能应用的核心组件&#xff0c;其注册机制确保了 Agent 实例的身份合法性、通信安全性和服务可追溯性。注册过程通过唯一的凭证令牌&#xff08;Token&#xff09;与中心化服务进行双向…

作者头像 李华
网站建设 2026/4/16 10:38:49

拒绝封号!AI电影解说如何平衡效率与版权合规?

导语&#xff1a;在算法的镰刀下&#xff0c;头部大号如何“火中取栗”&#xff1f;现在的影视解说赛道&#xff0c;头上都悬着一把达摩克利斯之剑——版权风控。很多创作者面临着一个死循环&#xff1a;想追热点就要快&#xff0c;但“快剪”容易被判搬运、限流甚至封号&#…

作者头像 李华
网站建设 2026/4/10 20:32:33

英雄联盟智能助手League Akari:从入门到精通的完整教程

英雄联盟智能助手League Akari&#xff1a;从入门到精通的完整教程 【免费下载链接】LeagueAkari ✨兴趣使然的&#xff0c;功能全面的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/LeagueAkari 还在为英…

作者头像 李华
网站建设 2026/4/15 3:57:10

Git 面试题全面汇总

一、Git 基础概念题 1.1 Git 基本概念 Q1: Git 和 SVN 的主要区别是什么&#xff1f; Git - 分布式版本控制系统 - 每个开发者都有完整的代码仓库历史 - 支持离线操作&#xff0c;本地提交 - 分支创建和合并非常快速 # SVN - 集中式版本控制系统 - 只有一个中央仓库 - 需要网…

作者头像 李华
网站建设 2026/4/15 22:18:49

Wan2.2-T2V-A14B在垃圾分类科普动画中的趣味引导

Wan2.2-T2V-A14B在垃圾分类科普动画中的趣味引导 你有没有想过&#xff0c;教小朋友“香蕉皮是湿垃圾”这件事&#xff0c;也能变得像看动画片一样有趣&#xff1f;&#x1f604; 过去&#xff0c;我们靠海报、手册和老师口述来普及垃圾分类知识——信息准确&#xff0c;但总有…

作者头像 李华