讲师中心 微信公众号

扫码关注官方订阅号

注册 / 登录
首页
文章
后端开发 web前端 数据库 开发工具 php框架 常见问题 科技 Java 系统教程 电脑教程 硬件教程 手机教程 软件教程 游戏教程 自媒体 新闻
专题
后端开发 web前端 数据库 开发工具 php框架 科技 Java 系统教程 电脑教程 硬件教程 手机教程 软件教程 游戏教程 新闻
AI工具
AI 聊天问答 Agent智能体 AI 文本写作 AI 绘画作图 AI 设计工具 AI 视频创作 AI 音频制作 AI 办公学习 AI 编程开发 Prompt指令
学习
大前端 后端开发 数据库 移动端 运维开发 计算机基础
编程手册
大前端 后端开发 数据库 移动端 运维开发 计算机基础
下载
js特效 网站源码 工具下载 类库下载 网站素材 学习资源 插件扩展 手机游戏
最近更新
当前位置:首页 > web前端 > html教程 >

正文

0

0

使用 Python LXML 和 XPath 稳健提取 HTML 链接文本教程

碧海醫心

碧海醫心

发布时间:2025-11-10 12:48:01

|

491人浏览过

|

来源于php中文网

原创

使用 Python LXML 和 XPath 稳健提取 HTML 链接文本教程

本教程详细介绍了如何使用 python 的 lxml 库和 xpath 表达式从 html 链接中高效且稳健地提取文本内容。文章强调了在构建 xpath 时,应优先考虑使用元素属性(如 class)而非依赖脆弱的 dom 结构路径,并结合 //text() 函数来准确捕获目标文本。通过具体的代码示例,展示了如何编写更具弹性和可维护性的爬虫代码,避免因页面结构微小变动而导致的解析失败。

引言

在网页抓取和数据解析任务中,从 HTML 文档中提取特定文本内容是一项核心操作。Python 的 lxml 库结合 XPath 表达式,为我们提供了强大而灵活的工具。然而,许多初学者在构建 XPath 时,往往倾向于使用基于元素层级的绝对路径,这使得代码对网页结构变化非常敏感。本文将重点介绍一种更稳健的方法,通过利用 HTML 元素的属性来构建 XPath,并结合 //text() 函数来精确提取链接中的文本。

传统 XPath 的局限性

考虑以下 HTML 片段,我们需要提取 标签内的文本 "Former United States Secretary Of State":

Former United States Secretary Of State

如果使用基于层级的 XPath,例如 /html/body/div[5]/div[4]/div[5]/div[*],这种方法存在显著缺陷:

  1. 脆弱性: 只要 HTML 结构发生微小变化(例如,页面顶部添加了一个新的 div),这个 XPath 就会失效。
  2. 可读性差: 冗长的路径难以理解和维护。
  3. 通用性差: 如果页面上存在多个相同结构但位置不同的目标元素,这种 XPath 很难通用。

使用 LXML 和属性构建稳健 XPath

为了克服上述问题,我们应该优先使用 HTML 元素的属性(如 id、class、name 等)来定位元素。lxml 库是处理 XML 和 HTML 的高效工具,它提供了 etree 模块来解析文档和执行 XPath 查询。

立即学习“Python免费学习笔记(深入)”;

Powtoon
Powtoon

AI创建令人惊叹的动画短片及简报

下载

核心思想

  1. 利用 contains() 函数: 当元素的 class 属性包含多个值时,可以使用 XPath 的 contains() 函数进行模糊匹配。例如,div[contains(@class, 'tag')] 可以匹配所有 class 属性中包含 "tag" 的 div 元素。
  2. 使用 // 轴: // 轴表示从当前节点向下搜索所有后代节点,无论层级深度。这使得 XPath 不受父节点层级变化的影响。
  3. 结合 //text() 函数: //text() 是一个非常有用的 XPath 函数,它能够选择当前节点及其所有后代节点的文本内容,并将其作为一个列表返回。

示例代码

让我们通过一个具体的例子来演示如何提取上述 HTML 片段中的链接文本。

from lxml import etree

# 模拟的 HTML 内容
html_content = """
Header Content
Former United States Secretary Of State
Another Important Link Text
""" # 使用 etree.HTML 解析 HTML 内容 tree = etree.HTML(html_content) # 构建 XPath 表达式 # 1. //div[contains(@class,'tag')]:查找文档中所有 class 属性包含 'tag' 的 div 元素 # 2. //text():选择上一步找到的 div 元素及其所有后代节点的文本内容 xpath_expression = "//div[contains(@class,'tag')]//text()" # 执行 XPath 查询 selection = tree.xpath(xpath_expression) # 打印结果 print("提取到的文本内容:") for text_item in selection: # 对提取到的文本进行清理,去除首尾空白字符 cleaned_text = text_item.strip() if cleaned_text: # 确保只打印非空字符串 print(f"'{cleaned_text}'") # 假设我们只关心第一个匹配项 if selection: first_text = selection[0].strip() print(f"\n第一个匹配到的文本:'{first_text}'") else: print("\n未找到匹配的文本。")

代码解析:

  1. from lxml import etree:导入 lxml 库的 etree 模块。
  2. tree = etree.HTML(html_content):将 HTML 字符串解析成一个 ElementTree 对象,这是进行 XPath 查询的基础。
  3. xpath_expression = "//div[contains(@class,'tag')]//text()":
    • //div:在整个文档中查找所有 div 元素。
    • [contains(@class,'tag')]:这是一个谓词,过滤 div 元素,只选择那些 class 属性值中包含子字符串 "tag" 的 div。
    • //text():在找到的 div 元素内部(包括其子元素)查找所有文本节点。
  4. selection = tree.xpath(xpath_expression):执行 XPath 查询,返回一个包含所有匹配文本内容的列表。
  5. text_item.strip():对每个提取到的文本进行清理,去除多余的空白字符。

注意事项与最佳实践

  • XPath 调试: 在浏览器开发者工具(如 Chrome DevTools)中,可以使用 document.evaluate() 或直接在 Console 中测试 XPath 表达式,以确保其正确性。
  • 处理空结果: xpath() 方法返回一个列表。在访问列表元素(如 selection[0])之前,务必检查列表是否为空,以避免 IndexError。
  • 多重匹配: 如果 XPath 匹配到多个元素,xpath() 会返回一个包含所有匹配项的列表。你需要根据需求遍历列表或选择特定索引的元素。
  • 文本清理: 提取到的文本可能包含多余的换行符、空格或制表符。使用 strip() 方法是常见的清理操作。
  • 错误处理: 在实际的爬虫项目中,应加入更完善的错误处理机制,例如 try-except 块来捕获网络请求或解析错误。
  • XPath 轴和函数: 熟悉更多的 XPath 轴(如 parent::、following-sibling::)和函数(如 starts-with()、ends-with()、normalize-space())可以帮助你构建更复杂的查询。

总结

通过本教程,我们学习了如何利用 Python 的 lxml 库和 XPath 表达式,以一种更稳健和可维护的方式从 HTML 链接中提取文本。关键在于放弃脆弱的绝对路径,转而使用基于元素属性(如 class)的相对路径,并结合 //text() 函数来精确获取文本内容。这种方法不仅提高了代码的鲁棒性,也使得爬虫程序更能适应目标网站的结构变化,从而大大提升了数据抓取的效率和稳定性。在实际开发中,始终优先考虑使用属性定位,将使你的爬虫项目更加健壮。

相关文章

html如何提升速度转pdf_html转pdf提速法【攻略】

html怎样用命令行转pdf_命令行转html为pdf法【指南】

html怎样跨平台转pdf_跨平台html转pdf途径【方案】

html能不能批量转pdf_批量html转pdf实现路径【方法】

HTML怎样加本地背景图片_HTML加本地背景图片指南【实操】

HTML速学教程(入门课程)
HTML速学教程(入门课程)

HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

python html 浏览器 工具 ai win 爬虫 字符串解析 Python chrome html chrome devtools try xml 字符串 class console 对象 dom

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

上一篇:响应式CSS Grid与Flexbox布局:解决表单输入项不自适应问题 下一篇:Select2联动清空:避免事件循环的正确实现

作者最新文章

如何在 PHP 中将多个复选框选择结果安全拼接并写入邮件正文

2026-01-21 14:58

可爱戴安娜! 《识质存在》新实机展示

2026-01-21 14:59

Using a Global Variable Correctly in Go

2026-01-21 15:17

如何在隐藏必填字段未填写时将焦点移至自定义元素

2026-01-21 15:21

美国任天堂前总裁“库巴”履新!和前Xbox高管当同事

2026-01-21 15:27

显卡涨价潮杀到!微星率先调涨:华硕、技嘉紧随

2026-01-21 15:27

《零红蝶:重制版》新视频 女鬼从天而降

2026-01-21 15:28

鹰角《明日方舟:终末地》M站开分79!首发卖相不错但需时间检验

2026-01-21 15:35

夸克怎么变成AI了

2026-01-21 15:40

如何使用 Gson 正确解析嵌套多层 JSON 文件(含对象与数组)

2026-01-21 16:00

热门AI工具

更多
DeepSeek

DeepSeek

幻方量化公司旗下的开源大模型平台

AI大模型

开放平台

豆包大模型

豆包大模型

字节跳动自主研发的一系列大型语言模型

AI大模型

通义千问

通义千问

阿里巴巴推出的全能AI助手

AI大模型

腾讯元宝

腾讯元宝

腾讯混元平台推出的AI助手

文档处理

Excel 表格

文心一言

文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

AI大模型

中文写作

讯飞写作

讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

中文写作

写作工具

即梦AI

即梦AI

一站式AI创作平台,免费AI图片和视频生成。

图片拼接

图画生成

ChatGPT

ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

AI大模型

中文写作

智谱清言 - 免费全能的AI助手

智谱清言 - 免费全能的AI助手

智谱清言 - 免费全能的AI助手

AI大模型

PC软件

相关专题

更多
python开发工具
python开发工具

php中文网为大家提供各种python开发工具,好的开发工具,可帮助开发者攻克编程学习中的基础障碍,理解每一行源代码在程序执行时在计算机中的过程。php中文网还为大家带来python相关课程以及相关文章等内容,供大家免费下载使用。

772

2023.06.15

python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

661

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

764

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

679

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

1345

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

549

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

579

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

730

2023.08.11

菜鸟裹裹入口以及教程汇总
菜鸟裹裹入口以及教程汇总

本专题整合了菜鸟裹裹入口地址及教程分享,阅读专题下面的文章了解更多详细内容。

0

2026.01.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板
  • [表单按钮]简单的注册表单必填代码
  • [图片特效]jQuery图片抖动滑块切换
  • [表单按钮]jQuery星级评论表单美化代码
  • [图片特效]五种切换效果的jQuery幻灯片
  • [图片特效]jQuery垂直传送带图片切换
  • [表单按钮]jQuery手机注册表单获取验证码代码
  • [表单按钮]jQuery空格键添加a标签
  • [表单按钮]jQuery创意输入框表单提交特效
  • [图片特效]jQuery图片查看器代码
  • [图片特效]jQuery图片自动轮播切换展示特效
  • [电商源码]openaishop
  • [其它模板]思翔企(事)业单位文件柜 build 20080313
  • [企业站源码]雅龙智能装备工业设备类WordPress主题1.0
  • [电商源码]威发卡自动发卡系统
  • [电商源码]卡密分发系统
  • [电商源码]中华陶瓷网
  • [电商源码]简洁粉色食品公司网站
  • [电商源码]极速网店系统
  • [电商源码]淘宝妈妈_淘客推广系统
  • [电商源码]积客B2SCMS商城系统
  • [网站素材]2026新春鞭炮烟花背景矢量素材
  • [网站素材]波西米亚抽象装饰画矢量素材
  • [网站素材]新春剪纸梅花窗花装饰矢量素材
  • [网站素材]复古风格水果海报合集矢量模板
  • [网站素材]黑色风格黑色星期五宣传海报设计下载
  • [网站素材]2026马年新春祥云灯笼矢量素材
  • [网站素材]特价飞机旅行预定海报PSD素材下载
  • [网站素材]航空旅行折扣海报PSD源文件设计下载
  • [网站素材]怀旧黑胶音乐海报合集矢量模板
  • [网站素材]国潮烫金牡丹灯笼背景矢量素材
  • [前端模板]驾照考试驾校HTML5网站模板
  • [前端模板]驾照培训服务机构宣传网站模板
  • [前端模板]HTML5房地产公司宣传网站模板
  • [前端模板]新鲜有机肉类宣传网站模板
  • [前端模板]响应式天气预报宣传网站模板
  • [前端模板]房屋建筑维修公司网站CSS模板
  • [前端模板]响应式志愿者服务网站模板
  • [前端模板]创意T恤打印店网站HTML5模板
  • [前端模板]网页开发岗位简历作品展示网页模板
  • [前端模板]响应式人力资源机构宣传网站模板

相关下载

更多
php商城系统
淘源码商城PHP淘宝查信誉
PHP房产程序[BBWPS]
PHP简约自动发卡平台个人版
ERMEB域名PHP离线网络授权系统
Difeye-敏捷的轻量级PHP框架
大泉州汽车网PHP整站程序

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 12.9万人学习

Django 教程
Django 教程

共28课时 | 3.4万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.2万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 9.7万人学习

最新ThinkPHP 5.1全球首发视频教程(60天成就PHP大牛线上培训班课)
最新ThinkPHP 5.1全球首发视频教程(60天成就PHP大牛线上培训班课)

共79课时 | 151.4万人学习

phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 53.4万人学习

最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 13.2万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 9.7万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.9万人学习

最新文章

更多
如何让 <p> 文本显示在背景图片下方(而非覆盖其上)
如何让段落文本位于背景图片下方,同时保持标题位置不变
如何让段落内容紧随背景图片底部显示,同时保持标题位置不变
如何在导航栏中正确对齐社交图标(与Logo和菜单同行显示)
如何在导航栏中正确对齐社交媒体图标(同行显示Logo与菜单)
如何在导航栏中正确对齐社交媒体图标(与Logo和菜单同行显示)
CSS 样式表无法生效的常见原因及修复指南
如何在导航栏中正确对齐社交媒体图标(右侧)
JavaScript 中使用事件委托实现多表单的显示与隐藏
如何在导航栏中正确对齐社交媒体图标(同排显示Logo、导航菜单与社交图标)
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号

微信扫码
关注PHP中文网服务号

技术交流群

QQ扫码
加入技术交流群

PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • PHP学习

  • 技术支持

  • 返回顶部