Scrapy框架中的Pipeline使用详解

 更新时间:2023年10月23日 08:57:31   作者:喵叔哟  
这篇文章主要介绍了Scrapy框架中的Pipeline使用详解,Scrapy 中的 Pipeline 为我们提供了处理数据的功能,在实际开发中我们经常使用它来清洗/验证数据、去重和数据保存,需要的朋友可以参考下

前言

Scrapy 中的 Pipeline 为我们提供了处理数据的功能,在实际开发中我们经常使用它来清洗/验证数据、去重和数据保存。在一个项目中会存在多种 Pipeline ,每个 Pipeline 都是一个 class ,其中包含了一些处理的 Item 的方法。 Item 会在这些 Pipeline 中按顺序依次传递,如果其中一个 Pipeline 丢弃了 Item ,那么后面未执行到的 Pipeline 将不会收到这个 Item 。

自定义 Pipeline

自定义 Pipeline 其实很简单,只需要实现指定的方法即可。

process_item (self,item,spider)

解释:

该方法必须实现,处理数据的工作都在这个方法中进行,方法返回 dict 、Item 、 Twisted Deferred 或者是 DropItem 异常。

参数:

  • item : 被爬取的 Item ;
  • spider : 爬取 Item 时所使用的 Spider 。

Tip : 如果在 process_item 方法中丢弃了 Item ,那么这个 Item 将不会向后续 Pipeline 传递这个 Item 。

open_spider(self,spider)

解释:

爬虫开始运行时,将会在这个方法中执行一些初始化工作,例如打开数据库、打开文件等。

参数:

  • spider : 当前正在使用的
Spider close_spider(self,spider)

解释:

爬虫关闭时,将会在这个方法中执行一些后续工作,例如关闭数据库、关闭文件等。

参数:

  • spider : 当前正在使用的 Spider
from_crawl(self,crawler)

解释:

方法为类方法,通过初始化 crawler 对象返回 Pipeline 实例。我们可以通过 crawler 返回所有 Scrapy 核心组件。

特殊的 Pipeline

在一些项目中我们不仅要爬取网页的数据,还需要爬取文件或图片,并保存在本地。这时我们就需要用到 Scrapy 中特殊的 Pipeline :FilesPipeline 和 ImagesPipeline ,它们具有一些相同的方法和结构与,我们称这种 Pipeline 为 MediaPipeline 。FilesPipeline 和 ImagesPipeline 都包含如下特性:

  • 避免重复下载数据
  • 指定存储位置

ImagesPipeline 又包含如下特性:

  • 图片转换为 JPG 格式或者 RGB 格式
  • 生成缩略图
  • 限制图片下载的最大/最小宽高

Tip:Scrapy Pipeline 避免重复下载的方法是将要下载的文件的 URL 放入一个队列中,并且和 Response 关联,从而避免了重复下载。

FilesPipeline

FilesPipeline 下载文件的工作流程非常简单,一共有四个步骤:

  1. 爬虫把获取到的 Item 和希望下载的文件的 URL 保存到 file_urls 中;
  2. 爬虫返回的 Item 进入到 Pipeline 内部;
  3. Item 按照顺序传递到 FilesPipeline 时,file_urls 中的 URL 会被内置的调度器和下载器下载。在这个时候 Item 是被锁定的,直到需要下载的文件下载完成或者报错,Item 才解除锁定;
  4. 下载完成后,结果将被保存在 files 中,files 是一个列表,每条数据是 dict 类型。

ImagesPipeline

ImagesPipeline 是继承自 FilesPipeline ,也就是说它的大部分步骤和 FilesPipeline 一样。 唯一不同的是 ImagesPipeline 将需要下载的图片 URL 保存到了 image_urls 中,下载完成的结果保存到 images 中。

Tip:Pipeline 中不仅仅包含了这两个特殊的 Pipeline ,因为 FilesPipeline 和 ImagesPipeline 是比较常用的,因此我在这里进行了讲解。更多的内置 Pipeline 大家可以去 Scrapy 官网查看具体的文档。

我们在编写完 Pipeline 后需要在 settings.py 文件中进行注册,将我们编写的 Pipeline 注入到 Scrapy 中。

ITEM_PIPELINS= {
  '自定义Pipeline 路径':'优先级'
}

总结

本篇文章主要讲解了 Pipeline 的理论知识,虽然很短,但是这些知识是 Pipeline 的核心知识。下一节我将通过代码的形式来展现 Pipeline 的使用。

到此这篇关于Scrapy框架中的Pipeline使用详解的文章就介绍到这了,更多相关Pipeline使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python中print和return的作用及区别解析

    Python中print和return的作用及区别解析

    print的作用是输出数据到控制端,就是打印在你能看到的界面上。这篇文章给大家介绍Python中print和return的作用及区别解析,感兴趣的朋友跟随小编一起看看吧
    2019-05-05
  • 一文带你深入了解python中的类型注解

    一文带你深入了解python中的类型注解

    类型注解(Type Hints) 是一种在 Python 代码中为变量、函数参数和返回值添加类型信息的方式,下面小编就和大家详细介绍一下python中类型注解的相关语法吧
    2026-02-02
  • python+mediapipe+opencv实现手部关键点检测功能(手势识别)

    python+mediapipe+opencv实现手部关键点检测功能(手势识别)

    这篇文章主要介绍了python+mediapipe+opencv实现手部关键点检测功能(手势识别),本文仅仅简单介绍了mediapipe的使用,而mediapipe提供了大量关于图像识别等的方法,需要的朋友可以参考下
    2022-01-01
  • pycharm找不到解释器问题的解决方案

    pycharm找不到解释器问题的解决方案

    安装好PyCharm之后,新建或者导入项目碰到找不到解释器的情况,不用担心,追根到底,咱们就是需要找到pycharm*.exe的文件,那么这个文件在哪里呢?所以本文就给大家介绍一下pycharm找不到解释器问题的解决方案,需要的朋友可以参考下
    2024-04-04
  • Python selenium安装+Microsoft Edge驱动器下载配置流程(最新推荐)

    Python selenium安装+Microsoft Edge驱动器下载配置流程(最新推荐)

    本文介绍了如何在Python自动化Web浏览器背景下配置MicrosoftEdge浏览器驱动,主要内容包括查看浏览器版本、下载对应驱动、配置环境以及安装和验证Selenium库,感兴趣的朋友一起看看吧
    2025-02-02
  • python列表操作使用示例分享

    python列表操作使用示例分享

    这篇文章主要介绍了python列表操作使用示例,需要的朋友可以参考下
    2014-02-02
  • Python数据可视化之Matplotlib初级使用指南

    Python数据可视化之Matplotlib初级使用指南

    Matplotlib是Python中最常用的数据可视化库之一,它提供了丰富的图表类型和灵活的自定义选项,能帮助我们以更直观的方式理解数据,本文将对Matplotlib的基本功能进行介绍,包括如何创建和自定义图表等
    2023-07-07
  • Python过滤列表用法实例分析

    Python过滤列表用法实例分析

    这篇文章主要介绍了Python过滤列表用法,结合实例形式分析了过滤列表的具体定义,功能与使用技巧,需要的朋友可以参考下
    2016-04-04
  • Python实现Windows和Linux之间互相传输文件(文件夹)的方法

    Python实现Windows和Linux之间互相传输文件(文件夹)的方法

    下面小编就为大家带来一篇Python实现Windows和Linux之间互相传输文件(文件夹)的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • Python项目中安装OpenAI库简单易懂的解决方案

    Python项目中安装OpenAI库简单易懂的解决方案

    openAI库是OpenAI官方提供的Python SDK,旨在帮助开发者轻松调用OpenAI的API,实现自然语言处理(NLP)、图像生成、代码补全等AI功能,这篇文章主要介绍了Python项目中安装OpenAI库简单易懂的解决方案,需要的朋友可以参考下
    2026-03-03

最新评论