Scrapy中pipeline介绍以及多个爬虫的pipeline的使用


1.从pipeline的字典形式可以看出来,pipeline可以有多个,而且确实pipeline能够定义多个

    

2. 有多个爬虫,pipeline是怎样处理的呢?

    首先创建三个爬虫 : 例如: 在一个scrapy的项目里面爬取三个网站: 今日头条、新浪、豆瓣

     在cmd里面分别创建三个爬虫:

    

然后打开pycharm查看:

                

  就会看见有三个爬虫

(1)使用pipeline处理的第一个方式可以给item加上键和响应的值:     分别再相对的爬虫py里面,的parse方法里面加上相应的键和值

 1 """对应的toutiao.py"""
 2 def parse(self, response):
 3     item = {}
 4     item["come_from"] = "toutiao"
 5     pass
 6  
 7 """对应的sina.py"""
 8 def parse(self, response):
 9     item = {}
10     item["come_from"] = "sina"
11     pass
12  
13 """对应的douban.py"""
14 def parse(self, response):
15     item = {}
16     item["come_from"] = "douban"
17     pass

然后pipelines.py  在 process_item方法里面可以对值进行相应的操作,分别进行判断

1 class PipelinetestPipeline(object):
2     def process_item(self, item, spider):
3         if item["come_from"] == "toutiao":
4             pass
5         elif item["come_from"] == "sina":
6             pass
7         else:
8             pass
9         return item

也可以写多个类的形式进行:

 1 class PipelinetestPipeline(object):
 2     def process_item(self, item, spider):
 3         if item["come_from"] == "toutiao":
 4             pass
 5         return item
 6  
 7  
 8 class PipelinetestPipeline2(object):
 9     def process_item(self, item, spider):
10         if item["come_from"] == "sina":
11             pass
12         return item
13  
14  
15 class PipelinetestPipeline3(object):
16     def process_item(self, item, spider):
17         if item["come_from"] == "douban":
18             pass

(2) 除了给item加上键和值,还有第二方式,  spider.name 来进行判断,就不用给item加键和值

1 class PipelinetestPipeline(object):
2     def process_item(self, item, spider):
3         if spider.name == "toutiao":
4             pass
5         elif spider.name == "sina":
6             pass
7         else:
8             pass
9         return item

每个爬虫的类里面都有对应的name属性,也就是对应的每个爬虫的名字,所以可以利用这个属性来进行判断  然后在pipeline里面进行相应的处理

3.  对有多个爬虫时,pipeline通过上面的中方式进行处理,   一种方式是给item加上键和值,一种方式是里面name属性  分别对值或者爬虫的名字进行判断,进而对数据进行处理


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM