开发,设计,生活

网络爬虫系统

  • 2014-03-29 14:21:24 2014-06-18 08:59:27[U] 网络爬虫系统

    下载中间件功能

    这是处于引擎和下载器之间的一层组件,可以有多个下载中间件被加载运行, 在引擎传递请求给下载器的过程中,下载中间件可以对请求进行处理 (例如增加http header信息等), 在下载器完成http请求,传递响应给引擎的过程中, 下载中间件可以对响应进行处理(例如进行gzip的解压等)


    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