ECommerceCrawlers之Scrapy详解(五)

本文详细介绍了Scrapy中的Item Pipeline,包括其在数据处理流程中的角色、主要任务和组件编写。Item Pipeline负责清洗、验证和存储从网页中爬取的数据。文章展示了如何创建自定义的Pipeline,如清理HTML、去除重复项以及将数据保存为JSON格式。通过在settings.py中配置ITEM_PIPELINES,可以启用这些Pipeline组件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2021SC@SDUSC

ECommerceCrawlers之Scrapy详解(五)

pipelines详解

Item Pipeline简介

Item管道的主要责任是负责处理有蜘蛛从网页中抽取的Item,他的主要任务是清洗、验证和存储数据。
当页面被蜘蛛解析后,将被发送到Item管道,并经过几个特定的次序处理数据。
每个Item管道的组件都是有一个简单的方法组成的Python类。
他们获取了Item并执行他们的方法,同时他们还需要确定的是是否需要在Item管道中继续执行下一步或是直接丢弃掉不处理。

项目管道的执行过程

  1. 清理HTML数据
  2. 验证解析到的数据(检查Item是否包含必要的字段)
  3. 检查是否是重复数据(如果重复就删除)
  4. 将解析到的数据存储到数据库中

编写自己的Item Pipeline

每个项目管道组件是一个Python类,必须实现以下方法:

process_item(self, item, spider)

对于每个项目管道组件调用此方法。process_item() 必须返回一个带数据的dict,返回一个Item (或任何后代类)对象,返回一个Twisted Deferred或者raise DropItemexception。丢弃的项目不再由其他管道组件处理。

参数:

  • item(Itemobject或dict) - 剪切的项目
  • Spider(Spider对象) - 抓取物品的蜘蛛

另外,它们还可以实现以下方法:

# 当蜘蛛打开时调用此方法。
open_spider(self, spider)   # 参数spider打开的蜘蛛

# 当蜘蛛关闭时调用此方法。
close_spider(self, spider)   # 参数spider被关闭的蜘蛛

# 如果存在,则调用此类方法以从a创建流水线实例Crawler。它必须返回管道的新实例。Crawler对象提供对所有Scrapy核心组件(如设置和信号)的访问; 它是管道访问它们并将其功能挂钩到Scrapy中的一种方式。 
from_crawler(cls, crawler)  # 参数crawler(Crawlerobject) - 使用此管道的crawler

将抓取的items以json格式保存到文件中

从spider抓取到的items将被序列化为json格式,并且以每行一个item的形式被写入到items.jl文件中

import json 
  
class JsonWriterPipeline(object): 
  	def __init__(self): 
    	self.file = open('items.jl', 'wb') 
	def process_item(self, item, spider): 
    	line = json.dumps(dict(item)) + "\n"
    	self.file.write(line) 
    	return item

删除重复项

假设在spider中提取到的item有重复的id,那么我们就可以在process_item函数中进行过滤

from scrapy.exceptions import DropItem 

class DuplicatesPipeline(object): 

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

  	def process_item(self, item, spider): 
		if item['id'] in self.ids_seen: 
			raise DropItem("Duplicate item found: %s" % item) 
		else: 
			self.ids_seen.add(item['id']) 
			return item

激活ItemPipeline组件

在settings.py文件中,往ITEM_PIPELINES中添加项目管道的类名,就可以激活项目管道组件

ITEM_PIPELINES = { 
  'myproject.pipeline.PricePipeline': 300, 
  'myproject.pipeline.JsonWriterPipeline': 800, 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值