讲师中心 微信公众号

扫码关注官方订阅号

注册 / 登录
首页
文章
后端开发 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免费学习笔记(深入)”;

BlessAI
BlessAI

Bless 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() 函数来精确获取文本内容。这种方法不仅提高了代码的鲁棒性,也使得爬虫程序更能适应目标网站的结构变化,从而大大提升了数据抓取的效率和稳定性。在实际开发中,始终优先考虑使用属性定位,将使你的爬虫项目更加健壮。

相关文章

如何使用 Selenium(Python)精准提取网页中特定结构的链接

如何使用 Selenium(Python)精准提取网页中特定链接

如何使用 Selenium(Python)精准提取网页中特定链接集合

html5合并多个xml文件_将分散xml数据整合为一个的技巧【技巧】

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联动清空:避免事件循环的正确实现

作者最新文章

MapStruct 多参数映射:正确使用 source 属性绑定方法参数

2026-01-12 15:48

酷狗音乐如何设置苹果手机铃声

2026-01-12 15:49

Python 中函数返回值的正确获取方式

2026-01-12 15:59

iPhone屏幕上出现的方块按钮怎么隐藏

2026-01-12 16:00

如何在 IntelliJ IDEA 中禁用紧凑型大括号格式(强制换行)

2026-01-12 16:00

Go语言中类型转换:将双向通道转为只读通道的语法解析

2026-01-12 16:04

如何在Java中跨类访问对象实例并共享状态

2026-01-12 16:04

天塌了! 《棕色尘埃2》将开启和谐修改角色服装引不满

2026-01-12 16:04

iPhone 17e即将发布,刘海屏彻底成为历史

2026-01-12 16:08

微PE工具箱如何进行分区

2026-01-12 16:08

热门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大模型

PDF 文档

相关专题

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

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

751

2023.06.15

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

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

636

2023.07.20

python能做什么
python能做什么

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

758

2023.07.25

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

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

618

2023.07.31

python教程
python教程

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

1262

2023.08.03

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

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

547

2023.08.04

python eval
python eval

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

577

2023.08.04

scratch和python区别
scratch和python区别

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

706

2023.08.11

Java 桌面应用开发(JavaFX 实战)
Java 桌面应用开发(JavaFX 实战)

本专题系统讲解 Java 在桌面应用开发领域的实战应用,重点围绕 JavaFX 框架,涵盖界面布局、控件使用、事件处理、FXML、样式美化(CSS)、多线程与UI响应优化,以及桌面应用的打包与发布。通过完整示例项目,帮助学习者掌握 使用 Java 构建现代化、跨平台桌面应用程序的核心能力。

36

2026.01.14

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板
  • [图片特效]jQuery悬停图片变色放大特效
  • [文字特效]纯CSS3绘制2018英文动画特效
  • [表单按钮]Bootstrap复选框样式美化特效
  • [文字特效]CSS3实现水位充满文字特效
  • [表单按钮]超酷CSS3发光搜索框表单提交
  • [文字特效]animate.css制作酷炫文字特效
  • [表单按钮]jQuery售后五星评价表单代码
  • [文字特效]jQuery打字机文字输入特效
  • [表单按钮]jquery文件上传表单
  • [文字特效]纯CSS3绿色锯齿字体特效下载
  • [其它模板]思翔企(事)业单位文件柜 build 20080313
  • [企业站源码]雅龙智能装备工业设备类WordPress主题1.0
  • [电商源码]威发卡自动发卡系统
  • [电商源码]卡密分发系统
  • [电商源码]中华陶瓷网
  • [电商源码]简洁粉色食品公司网站
  • [电商源码]极速网店系统
  • [电商源码]淘宝妈妈_淘客推广系统
  • [电商源码]积客B2SCMS商城系统
  • [电商源码]CODEC2I 众筹系统
  • [网站素材]中国宏伟古建筑矢量素材
  • [网站素材]黑色星期五耳机折扣横幅设计下载
  • [网站素材]国潮风莲花荷塘插画矢量素材
  • [网站素材]假日快乐烟花背景ps素材下载
  • [网站素材]新春喜庆剪纸喜鹊窗花矢量素材
  • [网站素材]绿色生态梯田自然风景矢量素材
  • [网站素材]紫色风格2026折扣横幅海报设计下载
  • [网站素材]手绘烘焙甜点菜单矢量模板
  • [网站素材]电子数码产品超级促销海报设计下载
  • [网站素材]新中式喜鹊登梅花纹样矢量素材
  • [前端模板]驾照考试驾校HTML5网站模板
  • [前端模板]驾照培训服务机构宣传网站模板
  • [前端模板]HTML5房地产公司宣传网站模板
  • [前端模板]新鲜有机肉类宣传网站模板
  • [前端模板]响应式天气预报宣传网站模板
  • [前端模板]房屋建筑维修公司网站CSS模板
  • [前端模板]响应式志愿者服务网站模板
  • [前端模板]创意T恤打印店网站HTML5模板
  • [前端模板]网页开发岗位简历作品展示网页模板
  • [前端模板]响应式人力资源机构宣传网站模板

相关下载

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

精品课程

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

共4课时 | 0.6万人学习

Django 教程
Django 教程

共28课时 | 3.1万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.1万人学习

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

共6课时 | 7万人学习

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

共79课时 | 151.1万人学习

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

共6课时 | 53.4万人学习

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

共4课时 | 0.6万人学习

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

共6课时 | 7万人学习

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

共13课时 | 0.9万人学习

最新文章

更多
如何将 HTML 输入段落化并实现点击激活交互
HTML5插件怎样安全卸载_HTML5插件安全卸载要点【注意】
HTML5怎样给列表项加间隔边框_HTML5给列表项加间隔边框办法【列表】
夸克浏览器html5麦克风没声_修复夸克麦克风html5法【修麦】
微星电脑怎样测html5性能_微星电脑测html5能力【测评】
HTML5如何借助ScreenOrientation取屏幕方向数据_HTML5屏向取数法【集锦】
HTML5怎样插入动态图_HTML5插入动态图办法【动效】
HTML5怎样强化网页语义层次_用多层语义标签构建逻辑【层次】
HTML5如何通过CustomEvent传递接收数据_HTML5自定义事件取法【胪列】
夸克浏览器html5视频缓冲久_缩短夸克缓冲时长法【缩时】
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号

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

技术交流群

QQ扫码
加入技术交流群

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

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

  • PHP学习

  • 技术支持

  • 返回顶部