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
}