下载中间件功能
这是处于引擎和下载器之间的一层组件,能够有多个下载中间件被加载运行, 在引擎传递请求给下载器的过程当中,下载中间件能够对请求进行处理 (例如增长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