如何用item pipeline(管道)清洗数据

管道是什么

Item管道(Item Pipeline):
  • 主要负责处理有蜘蛛从网页中抽取的Item,主要任务是清洗、验证和存储数据。
  • 当页面被蜘蛛解析后,将被发送到Item管道,并经过几个特定的次序处理数据。
  • 每个Item管道的组件都是有一个简单的方法组成的Python类。
  • 它们获取了Item并执行它们的方法,同时还需要确定是否需要在Item管道中继续执行下一步或是直接丢弃掉不处理。
  • 类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。

管道的作用

  • 清理HTML数据
  • 验证抓取的数据(检查项目是否包含特定字段)
  • 检查重复(并删除)
    考虑到性能的原因,去重最好在链接中去重,或者利用数据库主键的唯一性去重
  • 将刮取的项目存储在数据库中

接着上文《如何使用scrapy的item来封装数据》,我现在需要实现额外的三个处理——将价格的单位英镑转换为人民币、去除掉书名相同的重复数据、将数据存入MongoDB中。

如何实现Item Pipeline

一个Item Pipeline不需要继承特定基类,只需要实现某些特定方法,如process_item、open_spider、close_spider等。

process_item(item , spider):

每个 Item Pipeline 组件都需要调用该方法,这个方法必须返回一个 Item (或任何继承类)对象, 或是抛出 DropItem 异常,被丢弃的 item 将不会被之后的 pipeline 组件所处理

需要传入的参数为:

  • item (Item 对象) : 被爬取的 item
  • spider (Spider 对象) : 爬取该 item 的 spider

    该方法会被每一个 item pipeline 组件所调用,process_item 必须返回以下其中的任意一个对象:

  • 一个 dict

  • 一个 Item 对象或者它的子类对象
  • 一个 Twisted Deferred 对象
  • 一个 DropItem exception;如果返回此异常,则该 item 将不会被后续的 item pipeline 所继续访问

    注意:该方法是Item Pipeline必须实现的方法,其它三个方法(open_spider/close_spider/from_crawler)是可选的方法

如果process_item返回了一项数据(item或字典),返回的数据会传递给下一级Item Pipeline继续处理,如果没有则结束处理。
另外,当process_item在处理某项item时抛出DropItem异常,该项item便会被抛弃,不再传递给后面的Item Pipeline处理,也不会导出到文件。

open_spider(self , spider ):——爬虫启动时调用

Spider打开时,即处理数据前,会回调该方法。该方法通常用于在开始处理数据前完成一些初始化工作,比如连接数据库。

close_spider(self , spider):——爬虫关闭时调用

与open_spider相对,为Spider关闭时,即处理数据后,会回调该方法。该方法通常用于在处理完所有数据之后完成某些清理工作,比如关闭数据库。

from_crawler(cls, crawler):——也是在爬虫启动时调用,但是比open_spider早

创建Item Pipeline对象时回调该类方法。该类方法用来从 Crawler 中初始化得到一个 pipeline 实例;它必须返回一个新的 pipeline 实例;Crawler 对象提供了访问所有 Scrapy 核心组件的接口,包括 settings 和 signals

代码实现

这里写图片描述

新建bookpipelines.py文件

from scrapy.exceptions import DropItem
from scrapy.item import Item
import pymongo

#实现价格转换——第一个Item Pipeline,执行顺序较次
class PricePipeline(object):

    exchange_rate = 8.5309

    def process_item(self , item , spider):
            price = float(item['price'][1:]) * self.exchange_rate
            item['price'] = '¥ %.2f' % price
            return item

# 实现去除重复书名的数据——第二个Item Pipeline,执行顺序最优
class DuplicatesPipeline(object):

    def __init__(self):
        self.book_set = set()

    def process_item(self , item , spider):
        name = item['name']
        if name in self.book_set:
            raise DropItem("Duplicate book found: %s" % item)
        self.book_set.add(name)
        return item

#实现将数据存入mongoDB中——第三个Item Pipeline,执行顺序最后
class MongoDBPipeline(object):

    def from_crawler(cls , crawler):
        cls.DB_URI = crawler.settings.get('MONGO_DB_URI' , 'mongodb://localhost:27017/')
        cls.DB_NAME = crawler.settings.get('MONGO_DB_NAME' , 'scrapy_datas')
        return cls()

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

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

    def process_item(self , item , spider):
        collection = self.db[spider.name]
        post = dict(item) if isinstance(item , Item) else item
        collection.insert_one(post)
        return item



  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Scrapy是一款功能强大的Python网络爬虫框架,可用于抓取和提取网页数据。以下是使用Scrapy进行数据爬取和解析的一些基本步骤: 1. 创建一个Scrapy项目:在命令行中使用"scrapy startproject projectname"命令创建一个新的Scrapy项目。 2. 创建一个Spider:在Scrapy项目中创建一个名为"spiders"的目录,并在其中创建一个新的Spider。Spider是用于指定要爬取哪些网站和如何解析网站数据的类。 3. 定义要爬取的网站和要提取的数据:在Spider类中,定义要爬取的网站和要提取的数据。使用Scrapy提供的选择器来选择需要的数据。 4. 编写代码来爬取数据:在Spider类中,使用Scrapy提供的功能来发送请求和解析网页数据。使用Scrapy提供的ItemLoader来提取数据并填充到Item对象中。 5. 存储数据:使用Scrapy提供的各种输出管道来存储数据。可以将数据存储到CSV、JSON或数据库中。 6. 运行Spider:在命令行中使用"scrapy crawl spidername"命令来运行Spider并开始爬取数据。 以上是使用Scrapy进行数据爬取和解析的一些基本步骤。要深入了解Scrapy的使用,请查看Scrapy的官方文档。 ### 回答2: Scrapy是一个用于数据爬取和网站抓取的Python框架。使用Scrapy进行数据挖掘,可以按照以下步骤进行: 1. 安装Scrapy:在Python环境中使用pip install scrapy命令进行安装Scrapy。 2. 创建一个新的Scrapy项目:使用scrapy startproject命令,在命令行中创建一个新的Scrapy项目。 3. 定义爬取的网站:在Scrapy项目中,可以通过编写Spider来定义要爬取的网站和提取数据的规则。Spider可以用于指定网站的URL和其他的配置项。 4. 编写爬虫代码:在Scrapy项目中,可以编写爬虫代码来定义爬取和提取数据的规则。可以使用Scrapy提供的选择器来提取网页中的数据,包括XPath和CSS选择器。 5. 存储数据:可以使用Scrapy提供的各个管道Pipeline)来对爬取到的数据进行处理和存储。可以将数据保存到本地文件或数据库中。 6. 配置中间件:Scrapy中的中间件可以用来处理请求和响应,在请求发出和响应返回时进行一些预处理和后处理操作。可以根据需要配置中间件,并自定义中间件的处理逻辑。 7. 运行爬虫:使用scrapy crawl命令在命令行中运行爬虫,开始爬取网页数据。可以根据需要设置爬取的并发数、延时时间等参数。 8. 解析和处理数据:在爬取网页数据后,可以对数据进行解析和处理。可以使用Python的各种数据处理库和工具来进行数据清洗、分析和挖掘。 使用Scrapy进行数据挖掘时,需要理解HTML结构、网络请求和响应的原理,以及XPath和CSS选择器的使用。此外,还可以通过配置Scrapy的各种参数和设置来优化爬取的性能和效率。最后,对爬取到的数据进行适当的数据清洗和加工,可以得到更好的挖掘结果。 ### 回答3: Scrapy是一个基于Python的开源网络爬虫框架,可以用于数据挖掘和信息提取。使用Scrapy进行数据挖掘的一般步骤如下: 1. 安装和配置Scrapy:首先,需要在Python环境中安装Scrapy库。可以使用pip命令来安装。安装完成后,需要创建一个Scrapy项目,可以使用命令行工具`scrapy startproject <project_name>`来创建项目。配置文件settings.py中需要做一些网络请求和数据保存的设置,例如设置请求头、代理等。 2. 设计Spider:在Scrapy中,Spider是一个用于爬取网页和从中提取数据的类。需要创建一个Spider类并继承Scrapy提供的Spider类。在Spider类中,需要定义爬取的起始URL、解析页面的方法、提取和保存数据等。可以使用XPath或正则表达式等方式来定位和提取数据。 3. 编写爬虫规则和处理管道:在Scrapy中,可以通过编写爬虫规则来定义爬取的范围和限制,例如允许的域名、URL的正则匹配等。还可以通过编写处理管道来对爬取的数据进行处理和保存。可以编写自定义的管道类来实现数据清洗、存储和导出等功能。 4. 运行爬虫:在项目根目录下,使用命令行工具`scrapy crawl <spider_name>`来运行爬虫。Scrapy会根据Spider类中设置的规则和方法进行网页的爬取和数据的提取。爬取的数据会被传递给处理管道进行处理和保存。 5. 数据处理和分析:爬取的数据可以保存到数据库、CSV文件、JSON文件等格式中。可以使用Python的数据处理和分析库(如Pandas)对数据进行进一步处理和分析。可以利用数据挖掘算法进行数据挖掘,例如聚类、分类、关联规则挖掘等。 总的来说,使用Scrapy进行数据挖掘需要先安装和配置Scrapy,然后设计Spider类来定义爬取和提取数据的逻辑,编写相应的爬虫规则和处理管道,最后运行爬虫并对爬取的数据进行处理和分析。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值