下載中間件功能
這是處於引擎和下載器之間的一層組件,能夠有多個下載中間件被加載運行, 在引擎傳遞請求給下載器的過程當中,下載中間件能夠對請求進行處理 (例如增長http header信息等), 在下載器完成http請求,傳遞響應給引擎的過程當中, 下載中間件能夠對響應進行處理(例如進行gzip的解壓等) html
scrapy框架自帶的下載中間件
- CookiesMiddleware 跟蹤處理 cookie
- DownloadTimeoutMiddleware 設置請求超時時間
- 其餘下載中間件
scrapy 下載中間件的開啓狀況
- 查看 /usr/local/lib/python2.7/dist-packages/scrapy/settings/default_settings.py 默認配置文件,變量 DOWNLOADER_MIDDLEWARES_BASE 的定義
- 有些中間件有開關參數,例如 COOKIES_ENABLED 控制 CookiesMiddleware 開啓或關閉
開發下載中間件,丟棄響應數據長度等於100的數據
- 建立 middlewares 目錄(與 settings.py 文件在同一目錄下)
- 在目錄下建立 mymiddlewares.py 文件,建立類 CustomMiddlewares,下載中間件的類繼承自 scrapy.contrib.downloadermiddleware.DownloaderMiddleware
- DownloaderMiddleware 主要提供以下的方法
- process_request 在請求傳遞給下載器前能夠處理請求對象
- process_response 在響應傳遞給引擎前處理響應數據
- process_exception 處理異步調用時發生的異常狀況
- 在 mymiddlewares.py 文件中添加下面代碼
from scrapy.exceptions import IgnoreRequest
from scrapy.contrib.downloadermiddleware import DownloaderMiddleware
class CustomMiddlewares(DownloaderMiddleware):
def process_response(self, request, response, spider):
if len(response.body) == 100:
return IgnoreRequest("body length == 100")
else:
return response
- 在配置文件 settings.py 中配置下載中間件
DOWNLOADER_MIDDLEWARES = {
"douban.middlerwares.mymiddlewares.CustomMiddlewares": 543,
}
- 運行 scrapy crawl doubanBook
原文連接: http://www.hopez.org/blog/9/1396102884 python