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屬性 分別對值或者爬蟲的名字進行判斷,進而對數據進行處理