在創建一個scrapy項目的時候,會自動生成一個pipeliens.py文件,它是用來放置用戶自定義的item pipeline,
一個 item pipeline不需要繼承特定的基類,只需要實現某些特定的方法,例如process_item、open_spider、close_spider
一個item pipeline必須實現一個process_item(item, spider)方法,該方法用來處理每一項由spider爬取到的數據,這其中有兩個參數
item
爬取到的一項數據(item或者字典)
spider
爬取這項數據的spider對象
可以看出process_item方法是item pipeline的核心
1、如果process_item在處理某一項item的時候返回了一項數據,返回的數據就繼續傳遞給下一個item pipeline(如果有就會繼續處理)
2、如果process_item在處理某一項item的時候跑出了一個一場,那麼這個item就會被拋棄,不會繼續傳遞給後面的item pipeline處理了,通常我們在檢測到無效數據的時候或者想要過濾數據的時候會拋出DropItem異常
除了必須實現的process_item方法以外,還有幾種常用的方法可以根據需求來選擇性的實現
open_spider(self,spider)
Spider打開的時候(處理數據之前)就會回調這個方法,通常這個方法用在開始處理數據之前完成某些初始化的工作,比如連接指定的數據庫
close_spider(self, spider)
Spider關閉時(處理完成數據之後)回調這個方法通常這個方法用在處理完成數據之後完成某些清理的操作,比如關閉數據庫的連接
from_crawler(cls, crawler)
創建Item pipeline對象的時候回調這個方法。通常在這個方法中通過crawler.settings讀取配置,根據配置來創建item pipeline對象
啓用Item pipeline
在scrapy中item pipeline是可選擇組件,當你想要啓動某一個item pipeline的時候需要在settings文件中進行配置
ITEM_PIPELINES是一個字典,我們把想要啓動的item pipeline添加到這個字典中,這裏面每一個鍵是item pipeline類的導入的路徑,對應的值是一個0-1000之間的數值,同時啓動多個item pipeline的時候scrapy會根據這些數值來決定item pipeline處理數據的先後的順序,數值小的在前面先執行