1. 程式人生 > >Scrapy框架的學習(3.pipeline介紹以及多個爬蟲的pipeline的使用)

Scrapy框架的學習(3.pipeline介紹以及多個爬蟲的pipeline的使用)

上個部落格最後面寫到了,pipeline的簡單使用以及引數的配置含義:https://blog.csdn.net/wei18791957243/article/details/86157707

 

1.從pipeline的字典形式可以看出來,pipeline可以有多個,而且確實pipeline能夠定義多個

    

2. 有多個爬蟲,pipeline是怎樣處理的呢?

    首先建立三個爬蟲 : 例如: 在一個scrapy的專案裡面爬取三個網站: 今日頭條、新浪、豆瓣

     在cmd裡面分別建立三個爬蟲:

    

  然後開啟pycharm檢視:

                   就會看見有三個爬蟲

(1)使用pipeline處理的第一個方式可以給item加上鍵和響應的值:

       分別再相對的爬蟲py裡面,的parse方法裡面加上相應的鍵和值

"""對應的toutiao.py"""
def parse(self, response):
    item = {}
    item["come_from"] = "toutiao"
    pass

"""對應的sina.py"""
def parse(self, response):
    item = {}
    item["come_from"] = "sina"
    pass

"""對應的douban.py"""
def parse(self, response):
    item = {}
    item["come_from"] = "douban"
    pass

       然後pipelines.py  在 process_item方法裡面可以對值進行相應的操作,分別進行判斷

class PipelinetestPipeline(object):
    def process_item(self, item, spider):
        if item["come_from"] == "toutiao":
            pass
        elif item["come_from"] == "sina":
            pass
        else:
            pass
        return item
   也可以寫多個類的形式進行:
class PipelinetestPipeline(object):
    def process_item(self, item, spider):
        if item["come_from"] == "toutiao":
            pass
        return item


class PipelinetestPipeline2(object):
    def process_item(self, item, spider):
        if item["come_from"] == "sina":
            pass
        return item


class PipelinetestPipeline3(object):
    def process_item(self, item, spider):
        if item["come_from"] == "douban":
            pass

(2) 除了給item加上鍵和值,還有第二方式,  spider.name 來進行判斷,就不用給item加鍵和值

class PipelinetestPipeline(object):
    def process_item(self, item, spider):
        if spider.name == "toutiao":
            pass
        elif spider.name == "sina":
            pass
        else:
            pass
        return item

  每個爬蟲的類裡面都有對應的name屬性,也就是對應的每個爬蟲的名字,所以可以利用這個屬性來進行判斷

  然後在pipeline裡面進行相應的處理

3.  對有多個爬蟲時,pipeline通過上面的中方式進行處理,

   一種方式是給item加上鍵和值,一種方式是裡面name屬性

  分別對值或者爬蟲的名字進行判斷,進而對資料進行處理