深入解析 Python 中 Parsel 的两种数据提取方式

更多资料获取

📚 个人网站:ipengtao.com


在网络爬虫的世界中,数据提取是至关重要的一环。Python 提供了许多强大的工具,其中之一就是 parsel 库,专门用于解析和提取 HTML 或 XML 数据。本篇博客将深入探讨 parsel 中两种主要的数据提取方式:基于 XPath 和 CSS 选择器。通过丰富的示例代码,我们将一步步了解如何使用这两种方法来有效地提取所需的数据。

XPath 数据提取

什么是 XPath?

XPath 是一种用于在 XML 或 HTML 文档中定位元素的查询语言。在 parsel 中,我们可以使用 xpath() 方法应用 XPath 表达式。让我们从一个简单的例子开始:

from parsel import Selector

html_content = """
<html>
    <body>
        <div class="container">
            <h1>Hello, World!</h1>
            <p>This is a sample paragraph.</p>
        </div>
    </body>
</html>
"""

selector = Selector(text=html_content)

# 使用 XPath 获取标题文本
title_text = selector.xpath('//h1/text()').get()
print("Title:", title_text)

# 使用 XPath 获取段落文本
paragraph_text = selector.xpath('//p/text()').get()
print("Paragraph:", paragraph_text)

在这个例子中,使用 XPath 表达式 //h1/text() 获取了 <h1> 元素的文本内容,同样,使用 //p/text() 获取了 <p> 元素的文本内容。

优点和缺点

XPath 的优势:
  1. 灵活性: XPath 提供了强大的灵活性,可以使用多种条件和轴定位元素。这使得在复杂的文档结构中准确定位特定数据变得相对容易。

  2. 表达能力: XPath 表达式可以描述节点之间的关系,允许我们以更复杂的方式选择和提取数据。这在处理具有深层次嵌套结构的文档时非常有用。

  3. 功能丰富: XPath 支持一系列函数,例如字符串处理、数学运算等,使得数据提取的操作更加强大和灵活。

XPath 的缺点:
  1. 表达式相对较长: 有时,XPath 表达式可能相对较长,尤其是在描述复杂结构或需要深度定位的情况下。这可能使代码显得冗长和不够直观。

  2. 学习曲线: XPath 的语法相对复杂,对于初学者来说可能需要一些时间来理解和掌握。与简单的选择器语法相比,XPath 学习曲线较陡。

  3. 性能: 在某些情况下,XPath 的性能可能略逊于 CSS 选择器。对于大型文档或需要高性能的应用,可能需要考虑性能方面的因素。

综合考虑这些优缺点,XPath 在处理复杂结构和需要灵活性的场景中表现出色,但在简单任务和代码直观性方面可能略显不足。在实际应用中,根据任务的性质和个人偏好选择合适的方法是至关重要的。

CSS 选择器数据提取

什么是 CSS 选择器?

与 XPath 类似,CSS 选择器是一种用于选择 HTML 元素的语法。在 parsel 中,我们可以使用 css() 方法通过 CSS 选择器获取元素。看下面的例子:

# 使用 CSS 选择器获取标题文本
title_text_css = selector.css('h1::text').get()
print("Title (CSS):", title_text_css)

# 使用 CSS 选择器获取段落文本
paragraph_text_css = selector.css('p::text').get()
print("Paragraph (CSS):", paragraph_text_css)

在这个例子中,我们使用 CSS 选择器 h1::text 获取了 <h1> 元素的文本内容,同样,使用 p::text 获取了 <p> 元素的文本内容。

优点和缺点

CSS 选择器的优势:
  1. 简洁和直观: CSS 选择器通常语法简洁,易读易理解。这使得在处理一些简单的数据提取任务时,CSS 选择器是更为直观和方便的选择。

  2. 学习曲线较低: 相对于 XPath,CSS 选择器的学习曲线较低。对于初学者来说,更容易上手,能够快速掌握基本的选择和提取操作。

  3. 性能: 在某些情况下,CSS 选择器的性能可能略优于 XPath。对于大型文档或对性能要求较高的应用,CSS 选择器可能是更好的选择。

CSS 选择器的缺点:
  1. 限制较多: CSS 选择器的功能相对较为有限,不能像 XPath 那样灵活。在处理复杂的文档结构时,可能需要进行多次选择和处理,增加了代码的复杂性。

  2. 不支持某些功能: CSS 选择器不支持一些 XPath 的高级功能,如轴选择。这在某些情况下可能限制了对于特定数据的准确定位。

  3. 不能描述父节点关系: CSS 选择器不能像 XPath 那样直接描述父节点关系,这在一些需要从父节点开始定位的情况下可能显得不够灵活。

实际应用示例

在这个实际的应用示例中,将使用 parsel 库从一个简单的博客网站中提取文章的标题和摘要信息。这个任务将涵盖如何结合使用 XPath 和 CSS 选择器来有效地定位和提取所需的数据。

首先,需要模拟博客网站的HTML结构:

# 模拟博客网站的HTML结构
blog_html_content = """
<html>
    <body>
        <div class="article">
            <h2 class="title">Python爬虫入门</h2>
            <p class="summary">学习如何使用Python进行简单而强大的网络爬虫。</p>
        </div>
        <div class="article">
            <h2 class="title">数据分析与可视化</h2>
            <p class="summary">探索数据分析和可视化的奥秘,使用Python的强大工具。</p>
        </div>
        <!-- 更多文章... -->
    </body>
</html>
"""

# 使用 parsel 创建选择器对象
selector_blog = Selector(text=blog_html_content)

接下来,将结合使用 XPath 和 CSS 选择器提取文章的标题和摘要信息:

# 使用 XPath 提取文章标题和摘要
titles_xpath = selector_blog.xpath('//h2[@class="title"]/text()').getall()
summaries_xpath = selector_blog.xpath('//p[@class="summary"]/text()').getall()

# 使用 CSS 选择器提取文章标题和摘要
titles_css = selector_blog.css('h2.title::text').getall()
summaries_css = selector_blog.css('p.summary::text').getall()

# 打印结果
for i in range(len(titles_xpath)):
    print(f"Article {i + 1}")
    print("  Title (XPath):", titles_xpath[i])
    print("  Summary (XPath):", summaries_xpath[i])
    print("  Title (CSS):", titles_css[i])
    print("  Summary (CSS):", summaries_css[i])
    print("\n")

在这个示例中,通过使用 XPath 和 CSS 选择器分别提取了文章的标题和摘要信息。通过比较两种方法的结果,可以更好地理解在实际应用中如何选择合适的定位方式。

通过运行上述代码,将得到类似以下的输出:

Article 1
  Title (XPath): Python爬虫入门
  Summary (XPath): 学习如何使用Python进行简单而强大的网络爬虫。
  Title (CSS): Python爬虫入门
  Summary (CSS): 学习如何使用Python进行简单而强大的网络爬虫.


Article 2
  Title (XPath): 数据分析与可视化
  Summary (XPath): 探索数据分析和可视化的奥秘,使用Python的强大工具。
  Title (CSS): 数据分析与可视化
  Summary (CSS): 探索数据分析和可视化的奥秘,使用Python的强大工具.

这个实际应用示例将帮助读者更好地理解如何在真实的爬虫任务中使用 parsel 库提取有用的信息。可以根据自己的实际需求修改示例代码,并尝试在其他网站上应用相似的技术。

总结

在本文中,深入探讨了在 Python 中使用 parsel 库进行数据提取的两种主要方式:基于 XPath 和 CSS 选择器。通过丰富的示例代码,详细介绍了这两种方法的优势和缺点。XPath 被赞誉为灵活性强,适用于复杂文档结构,但表达式相对较长。与之相比,CSS 选择器简洁直观,学习曲线较低,尤其适用于简单任务。

在实际应用示例中,模拟了一个博客网站的 HTML 结构,并展示了如何使用 parsel 结合 XPath 和 CSS 选择器提取文章的标题和摘要信息。通过比较两种方法的结果,可以更好地理解在实际爬虫任务中如何选择合适的定位方式。

总体而言,parsel 为数据提取提供了强大而灵活的工具,使得在不同的场景中能够选择最适合的方法。在实践中,根据任务的性质和个人偏好选择 XPath 或 CSS 选择器,将有助于提高爬虫代码的效率和可维护性。


Python学习路线

在这里插入图片描述

更多资料获取

📚 个人网站:ipengtao.com

如果还想要领取更多更丰富的资料,可以点击文章下方名片,回复【优质资料】,即可获取 全方位学习资料包。

在这里插入图片描述
点击文章下方链接卡片,回复【优质资料】,可直接领取资料大礼包。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/205910.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Memcached最新2023年面试题,高级面试题及附答案解析

文章目录 01、Memcached是什么&#xff0c;有什么作用&#xff1f;02、Memcached的多线程是什么&#xff1f;如何使用它们&#xff1f;03、Memcached与Redis的区别&#xff1f;04、如果缓存数据在导出导入之间过期了&#xff0c;怎么处理这些数据呢&#xff1f;05、如何实现集群…

机器学习入门(第五天)——决策树(每次选一边)

Decision tree 知识树 Knowledge tree 一个小故事 A story 挑苹果&#xff1a; 根据这些特征&#xff0c;如颜色是否是红色、硬度是否是硬、香味是否是香&#xff0c;如果全部满足绝对是好苹果&#xff0c;或者红色硬但是无味也是好苹果&#xff0c;从上图可以看出来&#…

传教士与野人过河问题

代码模块参考文章&#xff1a;传教士与野人过河问题&#xff08;numpy、pandas&#xff09;_python过河问题_醉蕤的博客-CSDN博客 问题描述 一般的传教士和野人问题&#xff08;Missionaries and Cannibals&#xff09;&#xff1a;有N个传教士和C个野人来到河边准 备渡河。…

vscode集成git

1、首先电脑要安装git 打开git官网地址&#xff1a;Git进行下载&#xff0c;如下图界面&#xff1a; 如图片中描述&#xff1a;一般进入官网后会识别电脑对应系统&#xff08;识别出了我的电脑是Windows系统 。如果未识别到电脑系统&#xff0c;可在左侧选择自己电脑对应的系统…

Maven——使用Nexus创建私服

私服不是Maven的核心概念&#xff0c;它仅仅是一种衍生出来的特殊的Maven仓库。通过建立自己的私服&#xff0c;就可以降低中央仓库负荷、节省外网带宽、加速Maven构建、自己部署构件等&#xff0c;从而高效地使用Maven。 有三种专门的Maven仓库管理软件可以用来帮助大家建立…

vue3使用动态component

使用场景&#xff1a; 多个组件通过component标签挂载在同一个组件中&#xff0c;通过触发时间进行动态切换。vue3与vue2用法不一样&#xff0c;这里有坑&#xff01; 使用方法&#xff1a; 1.通过vue的defineAsyncComponent实现挂载组件 2.component中的is属性 父组件&am…

deque容器结构学习笔记

1.结构图 2.deque对比vector和list deque双端队列&#xff0c;就像是list和vector的结合 vector&#xff1a; 优点&#xff1a;1.可以随机读取 2. 空间利用率高 缺点&#xff1a;1. 除了尾插尾删&#xff0c;其他插入删除效率比较低 2. 扩容效率低 list&#xff1a; 优点&…

第16关 革新云计算:如何利用弹性容器与托管K8S实现极速服务POD扩缩容

------> 课程视频同步分享在今日头条和B站 天下武功&#xff0c;唯快不破&#xff01; 大家好&#xff0c;我是博哥爱运维。这节课给大家讲下云平台的弹性容器实例怎么结合其托管K8S&#xff0c;使用混合服务架构&#xff0c;带来极致扩缩容快感。 下面是全球主流云平台弹…

threeJs引入模型使用3D模型(vite+React+Ts)

要在 Three.js 中使用 3D 模型&#xff0c;你需要加载模型文件并将其添加到场景中。Three.js 支持多种不同的模型格式&#xff0c;比如 OBJ、FBX、GLTF 等。 init vitelatest //创建一个vite的脚手架 选择react并配置Ts 安装three.js准备 npm install react-three/drei np…

Ubuntu Server 20.04.6下Anaconda3安装Pytorch

环境 Ubuntu 20.04.6 LTS Anaconda3-2023.09-0-Linux-x86_64.sh conda 23.7.4 Pytorch 1.11.0 安装 先创建一个工作环境&#xff0c;环境名叫lia&#xff1a; conda create -n lia python3.8环境的使用方法如下&#xff1a; conda activate lia # 激活环境 conda deactiv…

2021年8月18日 Go生态洞察:整合Go的网络体验

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

ps 透明印章制作

ps 透明印章制作 1、打开不透明印章2、抠出红色印章3、新建图层4、填充红色印章到新图层5、导出透明印章 1、打开不透明印章 打开ps软件&#xff0c;菜单栏选择 文件-打开 选择本地不透明印章 打开 2、抠出红色印章 ps菜单栏 选择 选择-色彩范围 点击色彩范围 色彩范围窗口 取…

13.单调栈(接雨水、柱状图最大矩形)【灵神基础精讲】

单调栈【灵神基础精讲】 https://www.bilibili.com/video/BV1VN411J7S7/ 单调栈和单调队列的关系&#xff1a;单调队列单调栈滑窗 单调栈&#xff0c;顾名思义就是栈内元素单调按照递增(递减)顺序排列的栈。 适用问题&#xff1a;单调栈分为单调递增栈和单调递减栈&#xff0c…

在Linux上安装KVM虚拟机

一、搭建KVM环境 KVM&#xff08;Kernel-based Virtual Machine&#xff09;是一个基于内核的系统虚拟化模块&#xff0c;从Linux内核版本2.6.20开始&#xff0c;各大Linux发行版就已经将其集成于发行版中。KVM与Xen等虚拟化相比&#xff0c;需要硬件支持的完全虚拟化。KVM由内…

Nginx实现(动静分离)

动静分离应该是听的次数较多的性能优化方案&#xff0c;那先思考一个问题&#xff1a;「「为什么需要做动静分离呢&#xff1f;它带来的好处是什么&#xff1f;」」 其实这个问题也并不难回答&#xff0c;当你搞懂了网站的本质后&#xff0c;自然就理解了动静分离的重要性。先来…

设计模式之装饰模式(2)--有意思的想法

目录 背景概述概念角色 基本代码分析❀❀花样重难点聚合关系认贼作父和认孙做父客户端的优化及好处继承到设计模式的演变过程 总结 背景 这是我第二次写装饰模式&#xff0c;这一次是在上一次的基础上进一步探究装饰模式&#xff0c;这一次有了很多新的感受和想法&#xff0c;也…

如何提高销售技巧,增加客户的成交率?

如何提高销售技巧&#xff0c;增加客户的成交率&#xff1f; 在如今的市场环境中&#xff0c;销售技巧的高低往往决定了你是否能够成功地打动客户的心。想要提高销售业绩&#xff0c;除了产品质量和服务的保障&#xff0c;更需要你精进销售技巧&#xff0c;从而让客户愿意为你…

MySQL三大日志详细总结(redo log undo log binlog)

MySQL日志 包括事务日志&#xff08;redolog undolog&#xff09;慢查询日志&#xff0c;通用查询日志&#xff0c;二进制日志&#xff08;binlog&#xff09; 最为重要的就是binlog&#xff08;归档日志&#xff09;事务日志redolog&#xff08;重做日志&#xff09;undolog…

一个资深测试工程师面试一来就问我这些题目

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;欢迎加入我们一起学习&#xff01;&#x1f4e2;资源分享&#xff1a;耗时200小时精选的「软件测试」资…

一个数据中心的PUE修养,必将迎来液冷存储的曙光

实现小于1.3的PUE硬指标&#xff0c;数据中心液冷存储将功不可没。 【全球存储观察 &#xff5c; 科技热点关注】 4000亿千瓦时&#xff0c;能耗如此惊人&#xff0c;这是预计到2030年全国数据中心的年耗电总量。 小于1.3&#xff0c;看似微不足道的数字&#xff0c;这是新建…