Python网络数据抓取(9):XPath

2024-06-18 05:36

本文主要是介绍Python网络数据抓取(9):XPath,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

引言

XPath 是一种用于从 XML 文档中选取特定节点的查询语言。如果你对 XML 文档不太熟悉,XPath 可以帮你完成网页抓取的所有工作。

实战

XML,即扩展标记语言,它与 HTML,也就是我们熟知的超文本标记语言,有相似之处,但也有显著的不同。HTML 有一套固定的标签,比如 body、head 或 p(段落),这些标签对于浏览器来说都有特定的含义。然而,XML 并不预设任何标签,你可以自由地为标签命名,而这些标签本身并不携带特定的含义。

XML 文档的设计初衷是简单、通用,易于在互联网上使用。因此,你可以自由地命名标签,而且 XML 现在通常用于在不同的网络服务之间传输数据,这是 XML 的一个主要应用场景。

再回到 XPath,它是一种专门用于 XML 文档的查询语言,其核心功能是选取节点。你可能会好奇,节点是什么?你可以将 XML 文档或 HTML 文档想象成一棵树,每个元素都是树上的一个节点。

alt

我之所以这样讲,是因为当你查看这个特定的 XML 文档时,你会发现有一个标签叫做 "Movie Database",在它下面可以包含多个电影标签。每部电影标签下,又可以细分出标题、年份、导演等子标签。

通过这种方式,我们构建了一个层级化的结构。如果用树状图来表示,我们可以看到:电影数据库是一个根标签,它下面可以挂载多部电影。每部电影作为一个节点,进一步包含了如标题、年份等信息。同样,在演员列表这个标签下,演员的名字和姓氏也被分别用不同的标签来表示。

img
img

标签的嵌套结构让我们能够将 XML 或 HTML 文档想象成树状结构。因此,在树的概念中,我们引入了节点。这些标签元素实际上就是树中的节点。同样地,HTML 文档也可以通过树状结构来表示并进行解析。

在解析过程中,我们可以利用 Beautifulsoup 等库来实现。这样,无论是 HTML 还是 XML 文档,都可以被想象成一棵树,并且可以通过 XPath 语法来查询和选取文档中符合特定模式的节点。

这就是 XPath 的核心思想。接下来,我将通过一些示例来展示如何使用 XPath 语法,以便我们能更深入地理解它。

示例

我们不会详细介绍 Xpath 语法本身,因为在本视频中我们的主要目标是学习如何使用 Xpath 进行网页抓取。

alt

假设我有一个 XML 文档,其中包含以下代码。我的根目录有一个书店标签,其中有多个图书标签,里面有标题和价格标签。您可以在此网站上找到此 Xpath 测试器。这是我测试 XML 和 Xpath 表达式的地方。

alt

现在,如果我在其中输入“/”,则意味着我想从树的根部进行搜索,并且我将编写“书店”。因此,它要做的就是从根目录搜索书店。所以,现在如果我点击 TEST XPATH,我就会得到这个。

alt

这就是完整的书店。现在,假设我想在书店购买我们拥有的所有书籍。因此,为此,你将这样做。

alt

然后我会得到这个结果。书店里的书都得到了。

alt

现在,假设您只想获取 ID 为 2 的那本书。因此,您只需放置一个方括号,然后在其中传递“@id=”2””。

alt

当您将 @ 与某些属性一起使用时,在这种情况下您指的是图书标签内的特定属性,并且您在说嘿!找到所有 ID 为 2 的图书标签。当我们运行它时,我们得到了这个。

alt

看看这个,我们只获取 ID 为 2 的那本书。现在,假设我想获取 ID 为 2 的那本书的价格。为此,我将简单地这样做。

alt

结果:

alt

这就是 Xpath 的工作原理。现在,如果您想了解有关 Xpath 语法的更多信息,则可以访问 w3schools 了解更多详细信息。

本文由 mdnice 多平台发布

这篇关于Python网络数据抓取(9):XPath的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1071438

相关文章

Java+AI驱动实现PDF文件数据提取与解析

《Java+AI驱动实现PDF文件数据提取与解析》本文将和大家分享一套基于AI的体检报告智能评估方案,详细介绍从PDF上传、内容提取到AI分析、数据存储的全流程自动化实现方法,感兴趣的可以了解下... 目录一、核心流程:从上传到评估的完整链路二、第一步:解析 PDF,提取体检报告内容1. 引入依赖2. 封装

Python内存优化的实战技巧分享

《Python内存优化的实战技巧分享》Python作为一门解释型语言,虽然在开发效率上有着显著优势,但在执行效率方面往往被诟病,然而,通过合理的内存优化策略,我们可以让Python程序的运行速度提升3... 目录前言python内存管理机制引用计数机制垃圾回收机制内存泄漏的常见原因1. 循环引用2. 全局变

使用Python的requests库来发送HTTP请求的操作指南

《使用Python的requests库来发送HTTP请求的操作指南》使用Python的requests库发送HTTP请求是非常简单和直观的,requests库提供了丰富的API,可以发送各种类型的HT... 目录前言1. 安装 requests 库2. 发送 GET 请求3. 发送 POST 请求4. 发送

python 线程池顺序执行的方法实现

《python线程池顺序执行的方法实现》在Python中,线程池默认是并发执行任务的,但若需要实现任务的顺序执行,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋... 目录方案一:强制单线程(伪顺序执行)方案二:按提交顺序获取结果方案三:任务间依赖控制方案四:队列顺序消

Python异步编程之await与asyncio基本用法详解

《Python异步编程之await与asyncio基本用法详解》在Python中,await和asyncio是异步编程的核心工具,用于高效处理I/O密集型任务(如网络请求、文件读写、数据库操作等),接... 目录一、核心概念二、使用场景三、基本用法1. 定义协程2. 运行协程3. 并发执行多个任务四、关键

从基础到进阶详解Python条件判断的实用指南

《从基础到进阶详解Python条件判断的实用指南》本文将通过15个实战案例,带你大家掌握条件判断的核心技巧,并从基础语法到高级应用一网打尽,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录​引言:条件判断为何如此重要一、基础语法:三行代码构建决策系统二、多条件分支:elif的魔法三、

Python WebSockets 库从基础到实战使用举例

《PythonWebSockets库从基础到实战使用举例》WebSocket是一种全双工、持久化的网络通信协议,适用于需要低延迟的应用,如实时聊天、股票行情推送、在线协作、多人游戏等,本文给大家介... 目录1. 引言2. 为什么使用 WebSocket?3. 安装 WebSockets 库4. 使用 We

python中的显式声明类型参数使用方式

《python中的显式声明类型参数使用方式》文章探讨了Python3.10+版本中类型注解的使用,指出FastAPI官方示例强调显式声明参数类型,通过|操作符替代Union/Optional,可提升代... 目录背景python函数显式声明的类型汇总基本类型集合类型Optional and Union(py

MySQL中查询和展示LONGBLOB类型数据的技巧总结

《MySQL中查询和展示LONGBLOB类型数据的技巧总结》在MySQL中LONGBLOB是一种二进制大对象(BLOB)数据类型,用于存储大量的二进制数据,:本文主要介绍MySQL中查询和展示LO... 目录前言1. 查询 LONGBLOB 数据的大小2. 查询并展示 LONGBLOB 数据2.1 转换为十

使用SpringBoot+InfluxDB实现高效数据存储与查询

《使用SpringBoot+InfluxDB实现高效数据存储与查询》InfluxDB是一个开源的时间序列数据库,特别适合处理带有时间戳的监控数据、指标数据等,下面详细介绍如何在SpringBoot项目... 目录1、项目介绍2、 InfluxDB 介绍3、Spring Boot 配置 InfluxDB4、I