zg手冊 之 scrapy 開發(3)-- 下載中間件

下載中間件功能

這是處於引擎和下載器之間的一層組件,能夠有多個下載中間件被加載運行, 在引擎傳遞請求給下載器的過程當中,下載中間件能夠對請求進行處理 (例如增長http header信息等), 在下載器完成http請求,傳遞響應給引擎的過程當中, 下載中間件能夠對響應進行處理(例如進行gzip的解壓等) html


scrapy框架自帶的下載中間件

  1. CookiesMiddleware 跟蹤處理 cookie
  2. DownloadTimeoutMiddleware 設置請求超時時間
  3. 其餘下載中間件


scrapy 下載中間件的開啓狀況

  1. 查看 /usr/local/lib/python2.7/dist-packages/scrapy/settings/default_settings.py 默認配置文件,變量 DOWNLOADER_MIDDLEWARES_BASE 的定義
  2. 有些中間件有開關參數,例如 COOKIES_ENABLED 控制 CookiesMiddleware 開啓或關閉


開發下載中間件,丟棄響應數據長度等於100的數據

  1. 建立 middlewares 目錄(與 settings.py 文件在同一目錄下)
  2. 在目錄下建立 mymiddlewares.py 文件,建立類 CustomMiddlewares,下載中間件的類繼承自 scrapy.contrib.downloadermiddleware.DownloaderMiddleware
  3. DownloaderMiddleware 主要提供以下的方法
    1. process_request 在請求傳遞給下載器前能夠處理請求對象
    2. process_response 在響應傳遞給引擎前處理響應數據
    3. process_exception 處理異步調用時發生的異常狀況
  4. 在 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
  1. 在配置文件 settings.py 中配置下載中間件
DOWNLOADER_MIDDLEWARES = {
               "douban.middlerwares.mymiddlewares.CustomMiddlewares": 543,
               }
  1. 運行 scrapy crawl doubanBook


原文連接: http://www.hopez.org/blog/9/1396102884 python

相關文章
相關標籤/搜索