Scrapy多个spider情况下的pipeline、item设置

Scrapy中多个spider的情况:

一、Scrapy只存在一个Spider(正常情况)。

items设置:


注:我将数据库操作写在item中,当spider中yield item时,就将数据库方法传入到pipelines中,这样pipeline中比较简洁。

pipelines设置:

settings设置:

二、Scrapy中多个spider,存入同一个数据库不同的表中

  如下图,在一个Scrapy项目中存在多个spider,一般情况下,会在pipeline中进行item判断,如果是对应的item进行对应的数据库操作:

但如果只有四五个spider的话还可以,但随着spider的增多pipeline会越来越臃肿。一般我会采用类似Django的存储方法,将多个spider的items单独存入到一个item文件夹中。每个items包含数据库插入方法。

items设置:


这样,Pipeline就会通用性很高。

pipelines设置:

同上

三、Scrapy中多个Spider,存入不同数据库中不同的表中。

  有些时候,我们可能需要存入不同的数据库中,而settings中只能设置一个数据库的资料,那么这时候我们就需要使用custom_settings参数来为每一个spider配置对应的pipeline。不过scrapy版本必须是1.1以上

Class Test1(scrapy.Spider):
	name = "test1"
	custom_settings = {
    	'ITEM_PIPELINES':{'xxxx.pipelines.TestPipeline1': 301},
}
Class Test2(scrapy.Spider):
	name = "test2"
	custom_settings = {
    	'ITEM_PIPELINES':{'xxxx.pipelines.TestPipeline2': 302},
}

但是在settings里面也要配置pipeline:

ITEM_PIPELINES = {
    'xxxx.pipelines.TestPipeline1': 301,
    'xxxx.pipelines.TestPipeline2': 302
}
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Scrapy中,我们可以使用pipeline来处理多个spider的数据。PipelineScrapy中用来处理Item的组件,它提供了一种机制,可以方便地将Item传递给不同的处理器,以便进行后续处理。以下是如何处理多个spider数据的步骤: 1. 创建Pipeline类 首先,我们需要创建一个Pipeline类来处理多个spider的数据。在这个类中,我们可以定义一些处理器来处理不同的Item。例如,我们可以定义一个处理器来保存数据到数据库,另一个处理器来保存数据到文件等等。 2. 在settings.py中启用Pipeline 在settings.py文件中,我们需要启用我们刚刚创建的Pipeline类。我们可以使用ITEM_PIPELINES设置来指定我们的Pipeline类。 3. 在Spider中调用Pipeline 最后,在Spider中,我们可以通过yield语句将Item传递给Pipeline进行处理。Pipeline将对Item进行处理,并将其传递给下一个处理器。 下面是一个示例Pipeline类的代码: ``` python import json class MyPipeline(object): def __init__(self): self.file = open('items.json', 'wb') def process_item(self, item, spider): line = json.dumps(dict(item)) + "\n" self.file.write(line) return item def spider_closed(self, spider): self.file.close() ``` 在这个示例中,我们定义了一个MyPipeline类,它将Item保存到JSON文件中。在process_item方法中,我们将Item转换为JSON字符串,并将其写入文件中。在spider_closed方法中,我们关闭文件。 在settings.py文件中,我们可以使用以下代码来启用我们的Pipeline类: ``` python ITEM_PIPELINES = { 'myproject.pipelines.MyPipeline': 300, } ``` 在Spider中,我们可以通过以下代码将Item传递给Pipeline进行处理: ``` python def parse(self, response): item = MyItem() # 填充item数据 yield item ``` 在这个示例中,我们使用yield语句将Item传递给Pipeline进行处理。Pipeline将对Item进行处理,并将其传递给下一个处理器。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值