在scrapy運行的整個過程當中,對scrapy框架運行的某些步驟作一些適配本身項目的動做.框架
例如scrapy內置的HttpErrorMiddleware,能夠在http請求出錯時作一些處理.scrapy
配置settings.py.詳見scrapy文檔 https://doc.scrapy.orgide
scrapy的中間件理論上有三種(Schduler Middleware,Spider Middleware,Downloader Middleware),在應用上通常有如下兩種函數
主要功能是在爬蟲運行過程當中進行一些處理.spa
主要功能在請求到網頁後,頁面被下載時進行一些處理.中間件
- process_spider_input 接收一個response對象並處理,對象
位置是Downloader-->process_spider_input-->Spiders(Downloader和Spiders是scrapy官方結構圖中的組件)文檔
- process_spider_exception spider出現的異常時被調用input
- process_spider_output 當Spider處理response返回result時,該方法被調用requests
- process_start_requests 當spider發出請求時,被調用
位置是Spiders-->process_start_requests-->Scrapy Engine(Scrapy Engine是scrapy官方結構圖中的組件)
- process_request request經過下載中間件時,該方法被調用
- process_response 下載結果通過中間件時被此方法處理
- process_exception 下載過程當中出現異常時被調用
編寫中間件時,須要思考要實現的功能最適合在那個過程處理,就編寫哪一個方法.
中間件能夠用來處理請求,處理結果或者結合信號協調一些方法的使用等.也能夠在原有的爬蟲上添加適應項目的其餘功能,這一點在擴展中編寫也能夠達到目的,實際上擴展更加去耦合化,推薦使用擴展.