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 }