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

news2024/9/23 19:26:23

更多资料获取

📚 个人网站: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.coloradmin.cn/o/1272538.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

8. 队列

队列(queue)是一种遵循先入先出规则的线性数据结构。顾名思义&#xff0c;队列模拟了排队现象&#xff0c;即新来的人不断加入队列的尾部&#xff0c;而位于队列头部的人逐个离开。 如下图所示&#xff0c;我们将队列的头部称为“队首”&#xff0c;尾部称为“队尾”&#xff…

聚硫醇固化剂Capure3-800含巯基-SH环氧固化剂TDS说明书

聚硫醇固化剂Capure3-800含巯基-SH环氧固化剂TDS说明书

【程序员的自我修养03】深入了解ELF文件格式

绪论 大家好&#xff0c;欢迎来到【程序员的自我修养】专栏。正如其专栏名&#xff0c;本专栏主要分享学习《程序员的自我修养——链接、装载与库》的知识点以及结合自己的工作经验以及思考。编译原理相关知识本身就比较有难度&#xff0c;我会尽自己最大的努力&#xff0c;争取…

Python 异常处理(try except)

文章目录 1 概述1.1 异常示例 2 异常处理2.1 捕获异常 try except2.2 抛出异常 raise 3 异常类型3.1 内置异常3.2 自定义异常 1 概述 1.1 异常示例 异常&#xff1a;程序执行中出现错误&#xff0c;若不处理&#xff0c;则程序终止 示例代码&#xff1a; v 6 / 0 # 除数不…

滴水逆向三期笔记与作业——02C语言——07 多维数组

OneNote防丢 多维数组 一、二维数组的初始化1.1 二维数组初始化1.2 给定部分值1.3 二维数组省略第二层的{}1.4 省略长度1.5 多维数组寻址1.6 作业 一、二维数组的初始化 1.1 二维数组初始化 代码1 int arr[3][4] { {1,2,3,4}, {5,6,7,8}, {9,7,6,5} }; 代码2 int arr[3*4…

科普:什么是合同生命周期管理?

在当前&#xff0c;企业面临自身转型升级与行业数字建设的挑战&#xff0c;急需一种系统化的解决方案&#xff0c;帮助企业在自身运作方面实现降本增效&#xff0c;为拓展业务获得发展提供助力&#xff0c;而合同生命周期管理在其中就扮演着十分重要的角色。 一、合同生命周期…

超详细!Opencv人脸识别!附源码!

一、新建环境 注意&#xff01;&#xff01;确定后需要关闭项目&#xff0c;重新打开&#xff0c;终端的环境才会变化&#xff01;&#xff01; 二、下载安装包&#xff08;只需要3个即可&#xff09; 1. 下载dlib包 pip install dlib-19.19.0-cp38-cp38-win_amd64.whl.whl …

数据结构学习笔记——二叉树的遍历和链式存储代码实现二叉树

目录 一、二叉树的遍历&#xff08;一&#xff09;二叉树的先序遍历&#xff08;DLR&#xff09;&#xff08;二&#xff09;二叉树的中序遍历&#xff08;LDR&#xff09;&#xff08;三&#xff09;二叉树的后序遍历&#xff08;LRD&#xff09;&#xff08;四&#xff09;二…

修复电脑中缺失的VCRUNTIME140.dll文件的5个有效方法

vcruntime140.dll丢失5个修复方法与vcruntime140.dll是什么以及丢失对电脑的影响 引言&#xff1a; 在日常使用电脑的过程中&#xff0c;我们可能会遇到一些错误提示&#xff0c;其中之一就是“vcruntime140.dll丢失”。那么&#xff0c;什么是vcruntime140.dll&#xff1f;它…

虚幻学习笔记1—给UI添加动画

一、前言 本文所使用的虚幻版本为5.3.2&#xff0c;之前工作都是用unity&#xff0c;做这类效果用的最多的是一个DoTween的插件&#xff0c;在虚幻中都内置集成了这这种效果制作。 图1.1 UI动画 二、过程 1、首先&#xff0c;在诸如按钮、图像等可交互控件中选中&#xff0c;如…

【驱动】串口驱动分析(四)-串口编程和调试方法

串口调试 串口调试主要有 根据/proc系统信息确认串口状态&#xff0c;stty命令&#xff0c;编程调试 三种调试方法&#xff0c;下面我们分别具体介绍下。 根据设备节点确认串口是否正常 系统上电时&#xff0c;默认会使能串口&#xff0c;我们可以通过dmesg | grep ttyS 查看…

2023 年 IntelliJ IDEA下载、安装教程,附详细图文

大家好&#xff0c;今天为大家带来的是 2023年 IntelliJ IDEA 下载、安装教程&#xff0c;超详细的图文教程&#xff0c;亲测可用。 文章目录 1 IDEA 下载2 IDEA 安装3 IDEA 使用4 快捷键新手必须掌握&#xff1a;Ctrl&#xff1a;Alt&#xff1a;Shift&#xff1a;Ctrl Alt&a…

mysql:免费的GUI客户端工具推荐并介绍常用的操作

给大家推荐几个常用的 mysql 数据库客户端 sequel-pro sequel-ace 官网下载地址 免费 sequel-ace 可以理解为 Sequel Pro 的升级版&#xff0c;由于Sequel Pro官方不维护了&#xff0c;特别是对 MySQL 8.0 支持不好&#xff0c;所以现在由社区维护了新分支 sequel-ace&#x…

中兴亮相中国国际现代化铁路技术装备展览会 筑智铁路5G同行

近日&#xff0c;第十六届中国国际现代化铁路技术装备展览会在北京中国国际展览中心举办&#xff0c;中兴以“数智铁路&#xff0c;5G同行”主题亮相本次展览会&#xff0c;并全面展示了“数字铁路网络基础设施”、“云边结合的铁路行业云”、“数字铁路赋能赋智”等方面的最新…

[蓝桥杯习题]———位运算、判断二进制1个数

⭐Hello!这里是欧_aita的博客。 ⭐今日语录&#xff1a;行动胜过一切。 ⭐个人主页&#xff1a;欧_aita ψ(._. )>⭐个人专栏&#xff1a; 数据结构与算法&#xff08;内含蓝桥杯习题&#xff09; MySQL数据库 位运算 位运算位运算的定义简单运用 实战刷题题目思路代码实现声…

第十八章,Swing窗体

概述 String包的层次结构和继承关系如下 常用的Swing组件如下表 Swing常用窗体 JFrame 窗体 JFrame 类的常用构造方法包括以下两种形式&#xff1a; public JFrame&#xff08;&#xff09;&#xff1a;创建一个初始不可见、没有标题的窗体。 public JFrame(String title)&a…

调查问卷平台可以设置考卷吗?在线考试与问卷调查的结合

我们现在使用调查问卷不仅可以用来做数据收集&#xff0c;还可以用来设置考卷。 Zoho Survey也可以帮助您实现考试这一功能&#xff0c;具体操作如下图&#xff1a; 第一步&#xff1a;打开【Survey】&#xff0c;点击【创建调查】。 第二步&#xff1a;填写【调查名称】和【类…

中国毫米波雷达产业分析3——毫米波雷达市场分析(四、五、六)

四、康养雷达市场 &#xff08;一&#xff09;市场背景 1、政府出台系列政策提升智慧健康养老产品供给和应用 康养雷达是一种以老年人为主要监测对象&#xff0c;可以实现人体感应探测、跌倒检测报警、睡眠呼吸心率监测等重要养老监护功能的新型智慧健康养老产品。 随着我国经…

.net core 连接数据库,通过数据库生成Modell

1、安装EF Core Power Tools&#xff1a;打开Vs开发工具→扩展→管理扩展 2、(切记执行这步之前确保自己的代码不存在编写或者编译错误&#xff01;)安装完成后在你需要创建数据库实体的项目文件夹上面单击右键&#xff0c;找到EF Core 工具&#xff08;必须安装扩展之和才会有…

深度解析 Spring Security 自定义异常失效问题:源码剖析与解决优化

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall &#x1f343; vue3-element-admin &#x1f343; youlai-boot &#x1f33a; 仓库主页&#xff1a; Gitee &#x1f4ab; Github &#x1f4ab; GitCode &#x1f496; 欢迎点赞…