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
}

发表评论