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
}

你可能感兴趣的:(Python基础,爬虫)