【Python爬虫实战】XPath与lxml实现高效XML/HTML数据解析
🌈个人主页:https://blog.csdn.net/2401_86688088?type=blog
🔥 系列专栏:https://blog.csdn.net/2401_86688088/category_12797772.html

目录
前言
一、为什么学习xpath和lxml
(一)高效解析和提取数据
(二)灵活处理复杂的 HTML 和 XML 结构
(三)与其他工具相比更强的功能性
(四)广泛应用于 Web 抓取和数据解析
(五)易于学习和应用
(六)xpath和lxml总结
二、xpath介绍
(一)XPath 的核心概念
(二)XPath 的主要功能
(三)示例
(四)应用
(五)xpath总结
三、xpath语法
(一)基本路径表达式
(二)节点选择
(三)条件筛选
(四)运算符
(五)常用的函数
(六)示例
(七)xpath语法总结
四、总结
前言
在数据处理和 Web 抓取领域,快速、精准地解析和提取信息至关重要。XPath 和 lxml 是两个用于处理 XML 和 HTML 数据的强大工具。XPath 是一种查询语言,能够通过路径表达式从结构化文档中轻松提取节点和元素;而 lxml 是一个高效的 Python 库,专注于解析和操作 XML 和 HTML 文档。通过学习 XPath 和 lxml,我们可以轻松应对复杂的数据提取和解析任务,从而在 Web 抓取、数据转换、配置文件解析等应用场景中更高效地获取所需信息。
一、为什么学习xpath和lxml
学习 XPath 和 lxml 的原因主要在于它们在处理和解析 XML 和 HTML 数据方面的强大功能。以下是详细原因:
(一)高效解析和提取数据
-
XPath 是一种用于在 XML 和 HTML 文档中定位节点的查询语言。它使得我们可以用简单的路径表达式从文档中提取出特定的元素或文本内容。相比于传统的字符串查找方法,XPath 更加精确和高效。
-
lxml 是一个高性能的库,专门用于解析和处理 XML 和 HTML。它基于 C 语言编写的 libxml2 和 libxslt,因而处理速度很快,非常适合大规模数据解析任务。
(二)灵活处理复杂的 HTML 和 XML 结构
-
在 Web 抓取任务中,很多网页的 HTML 结构可能比较复杂,且带有嵌套标签。使用 XPath 可以轻松地选择嵌套元素或按照层级关系定位所需数据。
-
lxml 提供了对 XPath 的强大支持,结合 lxml 和 XPath 可以方便地处理 XML 或 HTML 文档的结构化数据提取,使得解析过程更加灵活和可控。
(三)与其他工具相比更强的功能性
-
虽然 BeautifulSoup 等库也可以解析 HTML,但 lxml 的速度更快,功能也更加全面。lxml 支持更复杂的 XPath 表达式,可以实现更加精准的数据提取。
-
相比于使用正则表达式来解析 HTML(容易出错且代码复杂),使用 lxml 和 XPath 更加简洁且易于维护。
(四)广泛应用于 Web 抓取和数据解析
-
XPath 和 lxml 是 Web 抓取中常用的工具。通过解析 HTML,用户可以提取网页中的文本、链接、图片等各种内容,广泛应用于数据采集和分析。
-
它们也被用于各种 XML 数据解析任务中,比如 RSS 源数据处理、配置文件读取、数据转换等。
(五)易于学习和应用
-
XPath 表达式相对容易学习,通过简单的路径语法就可以在复杂的文档中定位节点,适合初学者快速上手。
-
lxml 的 API 设计简洁明了,结合 XPath 使用起来直观易懂,能够极大提升 XML 和 HTML 数据的处理效率。
(六)xpath和lxml总结
学习 XPath 和 lxml 能够帮助我们更加高效和准确地处理 XML 和 HTML 数据。无论是 Web 数据抓取、数据转换、配置文件解析,还是其他文本处理任务,这两者都是非常有用的工具。通过掌握 XPath 和 lxml,你将能够更高效地应对数据处理中的各种挑战。
二、xpath介绍
XPath是一种用于在 XML 文档中查找信息的语言。它通过路径表达式来选择节点,允许用户从 XML 或 HTML 文档中导航、选择特定的节点或元素,非常适合数据提取和解析。XPath 主要用于 XML 文档,但也广泛用于 HTML 文档的解析,尤其是在 Web 抓取中。
(一)XPath 的核心概念
XPath 的表达式类似于文件路径,使用斜杠(/)表示层级关系,可以根据标签名、属性、层级结构等来选择特定的元素。
XPath 路径表达式
-
绝对路径:从根节点开始,以
/开头。-
/root/tag表示从根节点开始选择特定的子节点。
-
-
相对路径:以
//开头,用于选择文档中符合条件的所有节点,而不考虑位置。-
//tag表示文档中所有名为tag的节点。
-
-
层级选择:
-
.表示当前节点。 -
..表示父节点。
-
-
属性选择:使用
@选择节点的属性。-
//tag[@attribute='value']表示选择指定属性值的节点。
-
常用表达式
-
//tag:选择所有名为tag的元素。 -
//tag[@attribute='value']:选择指定属性attribute等于某值value的元素。 -
//tag[text()='text']:选择文本内容为指定值的tag标签。 -
//tag[position()=n]:选择文档中的第n个tag标签。 -
//tag[1]:选择文档中的第一个tag标签。
(二)XPath 的主要功能
xpath的主要功能如下:
-
节点选择:可以选择单个或多个节点,根据层级、属性、文本内容等条件选择目标元素。
-
筛选:通过
[]可以指定过滤条件,例如属性值、位置、内容等。 -
文本和属性提取:可以直接提取节点的文本内容或节点的属性值。
(三)示例
假设有以下 HTML 结构,我们可以用 XPath 表达式来提取信息:
<div><p class="text">Hello World</p><p class="text">Hello XPath</p>
</div>
XPath 表达式示例:
-
//p[@class='text']:选择所有具有class='text'属性的<p>标签。 -
//p[@class='text'][1]/text():选择第一个<p>标签的文本内容。
(四)应用
-
XML 解析:XPath 是解析 XML 文档的重要工具,用于提取、筛选、操作节点。
-
HTML 数据抓取:在 Web 抓取中,结合 Python 库(如 lxml),XPath 可以提取 HTML 文档中的特定元素,广泛用于网页数据抓取。
-
数据转换和查询:适合在 XML 数据中查找和查询,常用于配置文件和数据传输中的节点查找。
(五)xpath总结
XPath 是一种功能强大的查询语言,通过路径表达式快速准确地从 XML 或 HTML 文档中选择节点和元素。其简洁灵活的语法和强大的定位功能,使其在数据提取、Web 抓取等任务中不可或缺。
三、xpath语法
XPath 语法用于在 XML 或 HTML 文档中定位和选择节点。通过路径表达式和一些特殊操作符,XPath 可以快速、精准地提取所需的内容。以下是 XPath 的基本语法和常用表达式:
(一)基本路径表达式
-
/:选择根节点。-
例如,
/html选择根节点<html>。
-
-
//:选择文档中符合条件的所有节点,不考虑它们的位置。-
例如,
//div选择文档中所有的<div>标签。
-
-
.:表示当前节点。 -
..:表示父节点。
(二)节点选择
-
tagname:选择指定的标签名。-
例如,
//p选择所有的<p>标签。
-
-
*:通配符,表示匹配任意节点。-
例如,
//div/*选择<div>下的所有子节点。
-
(三)条件筛选
条件筛选使用 [] 包含特定条件,以筛选符合条件的节点。
-
//tag[@attribute='value']:选择具有特定属性值的节点。-
例如,
//a[@href='example.com']选择所有href属性值为example.com的<a>标签。
-
-
//tag[text()='value']:选择文本内容为特定值的节点。-
例如,
//p[text()='Hello']选择内容为Hello的<p>标签。
-
-
//tag[position()=n]:选择特定位置的节点。-
例如,
//li[position()=1]选择第一个<li>标签。
-
-
//tag[last()]:选择该层级中的最后一个节点。-
例如,
//tr[last()]选择最后一个<tr>标签。
-
-
//tag[@attribute]:选择具有某个属性的节点。-
例如,
//img[@src]选择所有带有src属性的<img>标签。
-
(四)运算符
-
|:用于并集,选择多个路径匹配的节点。-
例如,
//h1 | //h2选择所有<h1>和<h2>标签。
-
-
+、-、*、div:用于数学运算。-
例如,
count(//book) + 5表示书的数量加 5。
-
-
<、>、<=、>=、=、!=:比较运算符。-
例如,
//book[price > 30]选择所有价格大于 30 的书。
-
(五)常用的函数
-
text():获取节点的文本内容。-
例如,
//p/text()获取所有<p>标签的文本内容。
-
-
contains():检查某个字符串是否包含在节点的值中。-
例如,
//p[contains(text(), 'Hello')]选择文本内容包含Hello的<p>标签。
-
-
starts-with():检查字符串是否以指定内容开头。-
例如,
//p[starts-with(@class, 'intro')]选择所有class属性值以intro开头的<p>标签。
-
-
count():返回符合条件的节点数量。-
例如,
count(//book)返回<book>标签的数量。
-
-
last():选择最后一个符合条件的节点。-
例如,
//li[last()]选择最后一个<li>标签。
-
(六)示例
假设有如下 XML 结构:
<library><book><title lang="en">Harry Potter</title><price>29.99</price></book><book><title lang="fr">Le Petit Prince</title><price>19.99</price></book>
</library>
-
//book/title:选择所有<title>标签。 -
//book/title[@lang='en']:选择语言属性为en的<title>标签。 -
//book[price > 20]:选择价格大于 20 的<book>标签。 -
//book[last()]/title:选择最后一本书的<title>标签。
(七)xpath语法总结
XPath 是用于在 XML 和 HTML 文档中高效定位和筛选数据的查询语言。通过路径表达式、条件筛选、函数、运算符等,XPath 允许我们灵活、精准地提取所需内容,非常适合数据解析和 Web 抓取。
四、总结
XPath 和 lxml 的结合提供了灵活而高效的解析 XML 和 HTML 文档的能力。XPath 的路径表达式使我们能够快速选择和筛选节点,lxml 则以其高性能和全面的功能支持常见的 Web 数据处理任务。从基础的节点选择到复杂的条件筛选和函数应用,XPath 的丰富语法为我们带来了多样化的解析方法。通过熟练掌握这些工具,我们不仅能在数据提取和解析上提升效率,还能在实际应用中更好地应对复杂的数据处理需求。
相关文章:
【Python爬虫实战】XPath与lxml实现高效XML/HTML数据解析
🌈个人主页:https://blog.csdn.net/2401_86688088?typeblog 🔥 系列专栏:https://blog.csdn.net/2401_86688088/category_12797772.html 目录 前言 一、为什么学习xpath和lxml (一)高效解析和提取数据 …...
软件测试学习笔记丨Selenium学习笔记:元素定位与操作
本文转自测试人社区,原文链接:https://ceshiren.com/t/topic/22510 本文为霍格沃兹测试开发学社的学习经历分享,写出来分享给大家,希望有志同道合的小伙伴可以一起交流技术,一起进步~ 说明:本篇博客基于sel…...
在 HTML 中,<input> 元素支持的事件汇总
在 HTML 中,<input> 元素支持多种事件,这些事件可以在用户与输入字段交互时触发。以下是一些常见的 <input> 事件: input: 当 <input> 元素的值发生变化时触发。适用于文本、数字、日期等类型的输入。 change: 当 <inp…...
vue3【实战】 渲染 md 文件(markdown语法 .md后缀的文件)
1. 安装相关插件 npm i unplugin-vue-markdown markdown-it-prism prism unhead/vue2. 添加配置 src/main.ts // 给 md 文件创建头部 import { createHead } from unhead/vue // md 文件中代码高亮的样式 import prismjs/themes/prism.css // 自定义 md 文件的样式 import /as…...
Sora高端制造业WordPress外贸主题
Sora是一款专为高端制造业设计的WordPress主题,由国内知名wordpress开发团队简站wordpress主题开发,它以红色为主色调,适合外贸企业出海建独立站的模板。这个主题适用于WordPress 6.0及以上版本,并且只服务于真正有需要的用户。主…...
windows安装superset及各种问题解决
1,背景 先说说背景,之前在2月份已经安装过superset3.1.1,当时还没有提示SECRET_KEY异常,能正常运行,且已配置数据库连接. 2,报错信息及解决途径 1,创建admin时,提示Error! User already exists 这个是因为之前已经创建过admin用户,需要删除C:\Users\用户名\.superset下的.…...
JMeter模拟并发请求
PostMan不是严格意义上的并发请求工具,实际是串行的,如果需要测试后台接口并发时程序的准确性,建议采用JMeter工具。 案例:JMeter设置20个并发卖票请求,查看后台是否存在超卖的情况 方式一:一共10张票&…...
【小趴菜前端实习日记5】
实习日记5 一、vue3中如何使用router(获取this)二、ts中用object定义类型太宽泛导致Ts无法推断出正确类型三、动态设置日记封面失败vite动态引入静态资源1.方法一vue3父子组件生命周期执行顺序 2.方法二3.方法三 四、打包问题总结1.The import.meta meta-property i…...
如何通过谷歌外推占据搜索引擎首页?
外贸企业在推广过程中,如何在谷歌搜索引擎中占据有利位置,获取更多曝光,GLB谷歌霸屏服务就可以派上用场。它通过高效的品牌外推策略,可以让你的企业信息在谷歌中实现“霸屏”效果,特别是长尾关键词的全面覆盖 很多企业…...
jmeter学习(6)逻辑控制器
1. 简单控制器 简单控制器用来存放组件的,没有提供什么逻辑功能。 2. 循环控制器 用来循环执行请求,可以配置循环次数。注意它与线程组、测试计划中的循环是相互独立的,比如在线程组中设置循环2次,循环控制器设置循环3次&#…...
Android14 和android12 在锁屏界面Keyguard输错5次密码后倒计时30秒时重启手机不显示倒计时
参考如下修改:Android9.0在锁屏界面Keyguard输错5次密码后倒计时30秒时重启手机不显示倒计时_android 锁屏密码输错5次-CSDN博客 android 14 修改如下: androidap/SYSTEM/frameworks/base$ git status Refresh index: 100% (47218/47218), done. HEAD d…...
智能时代摩托车一键启动无钥匙进入感受科技前线
向智能化与高性能迈进,技术创新与绿色转型引领摩托车行业智能化出行。 摩托车一键启动无钥匙进入功能是一种先进的车辆控制系统,它允许驾驶员在不使用传统机械钥匙的情况下,通过智能感应技术自动解锁和启动摩托车。这种系统通常包括一个智能钥匙&#x…...
需要补充的技能
密码管理 文件管理 人际管理 Microsoft365 teams和onedrive,outlook,sharepoint等 被问到自己不懂的问题的时候怎么迅速反应快速回答? 被帅锅的时候怎么解决? 谈判技巧? 说话的语速? 遇到解决不了的问题如何处理? 考…...
15分钟学 Go 第 15 天:映射(Map)
第15天:映射(Map) 学习目标 在本节中,我们将深入理解Go语言中的字典类型(映射),通过例子与图示来帮助你掌握其使用方法。我们将涵盖以下几个方面: 概念定义创建和使用映射访问和更…...
element-plus 官方表格排序问题
element-plus 官方API 默认表格排序存在问题,一个list 被多组排序 修改后: 注意点: 这里一定要使用 sortable"custom",自定义 sort-change 方法 使用 sortable true 的情况排序会冲突,出现莫名奇妙的问题…...
AI语音模型在家宽业务中的应用
在运营商家宽业务支撑场景中,存在多个APP和系统需要与装维人员交互,传统的功能按钮点击型操作交互界面,越来越难以满足装维人员工作提效的迫切需求。家宽施工调度系统所需的AI语音能力主要包括ASR(音转字)和TTS&#x…...
零七生活API-文字转语音API使用示例
//官网地址:零七生活API - 提供免费接口调用平台function getAud(){axios({method: get,url: https://api.oick.cn/api/txt?text你好&spd5&apikeyyourApikey,responseType: blob, // 确保 axios 处理为二进制数据}).then((response) > {// 将 Blob 转换…...
rpc的客户端为什么称为stub
1.client为什么是stub Stub 在分布式系统中是一种 代理对象(Proxy Object),它本质上是一个在本地系统中扮演远程服务角色的代理。 在早期的 RPC 术语中,客户端端叫做 Stub,而服务器端的处理部分叫做 Skeleton。这种对…...
RHCE--nginx实现多IP访问多网站
方法一:nmtui 1.目录挂载 2.下载nginx 3.关闭防火墙 4.在一个网卡创建多个虚拟地址 1. 2. 3. 方法二:nmcil 1.手动配置 2.如图所示重新连接后创建ip成功 3.创建目录以及写入 结果...
TikTok运营对IP有什么要求?
TikTok在进行直播带货时,网络环境的配置尤为关键,网络质量直接影响到直播效果,因此选择稳定的IP地址很重要。那么,TikTok直播时该选择什么样的IP地址呢?接下来,我们来深入分析一下。 TikTok对IP地址的要求 …...
iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...
【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...
ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...
算法:模拟
1.替换所有的问号 1576. 替换所有的问号 - 力扣(LeetCode) 遍历字符串:通过外层循环逐一检查每个字符。遇到 ? 时处理: 内层循环遍历小写字母(a 到 z)。对每个字母检查是否满足: 与…...
JavaScript基础-API 和 Web API
在学习JavaScript的过程中,理解API(应用程序接口)和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能,使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...
逻辑回归暴力训练预测金融欺诈
简述 「使用逻辑回归暴力预测金融欺诈,并不断增加特征维度持续测试」的做法,体现了一种逐步建模与迭代验证的实验思路,在金融欺诈检测中非常有价值,本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...
为什么要创建 Vue 实例
核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...
Linux中《基础IO》详细介绍
目录 理解"文件"狭义理解广义理解文件操作的归类认知系统角度文件类别 回顾C文件接口打开文件写文件读文件稍作修改,实现简单cat命令 输出信息到显示器,你有哪些方法stdin & stdout & stderr打开文件的方式 系统⽂件I/O⼀种传递标志位…...
鸿蒙Navigation路由导航-基本使用介绍
1. Navigation介绍 Navigation组件是路由导航的根视图容器,一般作为Page页面的根容器使用,其内部默认包含了标题栏、内容区和工具栏,其中内容区默认首页显示导航内容(Navigation的子组件)或非首页显示(Nav…...
CppCon 2015 学习:Simple, Extensible Pattern Matching in C++14
什么是 Pattern Matching(模式匹配) ❝ 模式匹配就是一种“描述式”的写法,不需要你手动判断、提取数据,而是直接描述你希望的数据结构是什么样子,系统自动判断并提取。❞ 你给的定义拆解: ✴ Instead of …...
