Scrapy框架的使用之Item Pipeline的用法

本文详细介绍了Scrapy框架中ItemPipeline的功能与使用方法,包括数据清洗、存储等关键步骤,并提供了一个将数据保存到MongoDB的实例。

Item Pipeline的调用发生在Spider产生Item之后。当Spider解析完Response之后,Item就会传递到Item Pipeline,被定义的Item Pipeline组件会顺次调用,完成一连串的处理过程,比如数据清洗、存储等。

Item Pipeline的主要功能有如下4点。

  • 清理HTML数据。
  • 验证爬取数据,检查爬取字段。
  • 查重并丢弃重复内容。
  • 将爬取结果保存到数据库。

一、核心方法

我们可以自定义Item Pipeline,只需要实现指定的方法,其中必须要实现的一个方法是: process_item(item, spider)

另外还有如下几个比较实用的方法。

  • open_spider(spider)
  • close_spider(spider)
  • from_crawler(cls, crawler)

下面我们详细介绍这几个方法的用法。

1、process_item(item, spider)

process_item()是必须要实现的方法,被定义的Item Pipeline会默认调用这个方法对Item进行处理。比如,我们可以进行数据处理或者将数据写入到数据库等操作。它必须返回Item类型的值或者抛出一个DropItem异常。

process_item()方法的参数有如下两个。

  • item,是Item对象,即被处理的Item。
  • spider,是Spider对象,即生成该Item的Spider。

process_item()方法的返回类型归纳如下。

  • 如果它返回的是Item对象,那么此Item会被低优先级的Item Pipeline的process_item()方法处理,直到所有的方法被调用完毕。
  • 如果它抛出的是DropItem异常,那么此Item会被丢弃,不再进行处理。

2、open_spider(self, spider)

open_spider()方法是在Spider开启的时候被自动调用的。在这里我们可以做一些初始化操作,如开启数据库连接等。其中,参数spider就是被开启的Spider对象。

3、close_spider(spider)

close_spider()方法是在Spider关闭的时候自动调用的。在这里我们可以做一些收尾工作,如关闭数据库连接等。其中,参数spider就是被关闭的Spider对象。

4、from_crawler(cls, crawler)

from_crawler()方法是一个类方法,用@classmethod标识,是一种依赖注入的方式。它的参数是crawler,通过crawler对象,我们可以拿到Scrapy的所有核心组件,如全局配置的每个信息,然后创建一个Pipeline实例。参数cls就是Class,最后返回一个Class实例。

二、实例

1、MongoDB Pipeline

我们用一个MongoPipeline将信息保存到MongoDB,在pipelines.py里添加如下类的实现:

import pymongo

class MongoPipeline(object):
    def __init__(self, mongo_uri, mongo_db):
        self.mongo_uri = mongo_uri
        self.mongo_db = mongo_db

    @classmethod
    def from_crawler(cls, crawler):
        return cls(
            mongo_uri=crawler.settings.get('MONGO_URI'),
            mongo_db=crawler.settings.get('MONGO_DB')
        )

    def open_spider(self, spider):
        self.client = pymongo.MongoClient(self.mongo_uri)
        self.db = self.client[self.mongo_db]

    def process_item(self, item, spider):
        self.db[item.collection].insert(dict(item))
        return item

    def close_spider(self, spider):
        self.client.close()

这里需要用到两个变量,MONGO_URIMONGO_DB,即存储到MongoDB的链接地址和数据库名称。我们在settings.py里添加这两个变量,如下所示:

MONGO_URI = 'localhost'
MONGO_DB = 'images360'

这样一个保存到MongoDB的Pipeline的就创建好了。这里最主要的方法是process_item()方法,直接调用Collection对象的insert()方法即可完成数据的插入,最后返回Item对象。


本资源首发于崔庆才的个人博客静觅: Python3网络爬虫开发实战教程 | 静觅

Scrapy框架中的Item Pipeline是用于处理爬取过程中获取的数据,包括数据清洗、验证、转换,以及保存到数据库或文件中。在学习如何使用Item Pipeline之前,推荐阅读《Python爬虫框架Scrapy详解》一书,它详细介绍了Item Pipeline使用方法和技巧,直接对应你当前的需求。 参考资源链接:[Python爬虫框架Scrapy详解](https://wenku.youkuaiyun.com/doc/70v3cp0fg1?spm=1055.2569.3001.10343) 首先,你需要在你的Scrapy项目中定义一个Pipeline类,通常这个类包含两个方法:`open_spider`和`close_spider`。在`open_spider`方法中,你可以进行一些初始化操作,比如连接数据库;而在`close_spider`方法中,则可以关闭数据库连接等清理工作。 接下来,你需要在Items类中定义你需要抓取的数据结构,并在Pipeline类中实现`process_item`方法。这个方法接收一个Item对象作为参数,你可以在这个方法中实现具体的逻辑来清洗或转换数据。如果不需要对某个Item进行处理,可以返回`item`本身或使用`yield item`来传递给下一个Pipeline。 如果需要保存数据到数据库,你可以在`process_item`方法中使用ORM工具(如Django ORM)进行数据的保存操作。例如,使用Django的模型类来保存Item数据到数据库中。 最后,确保在项目的设置文件`settings.py`中激活你的Pipeline。你可以通过设置`ITEM_PIPELINES`字典来激活Pipeline,并使用整数作为值来定义执行顺序。 通过上述步骤,你就可以在Scrapy项目中使用Item Pipeline对爬取的数据进行必要的处理并保存。为了进一步提升你的Scrapy技能,包括如何处理大规模数据抓取和优化爬虫性能,建议继续深入学习《Python爬虫框架Scrapy详解》,它不仅提供了Item Pipeline使用指南,还有更多高级用法等你探索。 参考资源链接:[Python爬虫框架Scrapy详解](https://wenku.youkuaiyun.com/doc/70v3cp0fg1?spm=1055.2569.3001.10343)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值