scrapy 中间件

Posted on Sun 20 December 2015 in 源码分析, scrapy • Tagged with scrapy, Middlewares

Scrapy框架提供的中间件共有两个:Downloader middlewares 和 Spider Middlewares。这两个中间件分别作用在不同的数据流向上。

Downloader middlewares

Downloader middlewares顾名思义就是下载中间件,该中间件会在Scrapy的引擎从调度器获取到下一个要爬去的Request,并转发给下载器进行下载这个中间过程进行调用。以及下载器把需要爬取的Request爬取后生成的Response对象返回给Scrapy的引擎的过程中会调用Downloader middlewares。

管理Downloader middlewares的类是scrapy.middleware.DownloaderMiddlewares对象。该对象在生成Scrapy的下载器的时候会被调用,该对象通过 读取配置文件中DOWNLOADER_MIDDLEWARES来构建该对象。

class DownloaderMiddlewareManager(MiddlewareManager):

  component_name = 'downloader middleware'

  @classmethod
  def _get_mwlist_from_settings(cls, settings):
    return build_component_list(
        settings.getwithbase('DOWNLOADER_MIDDLEWARES'))

在'构造'的时候,首先是从配置文件获取Downloader middlewares的中间件字典,该字典的key为中间件对象的字符串表示,值为该中间件的权重。Scrapy在运行的时候从配置文件获取的中间件集合不仅包括settings/default_settings.py中默认的配置DOWNLOADER_MIDDLEWARES_BASE,还包括用户自定义的settings.py文件中的DOWNLOADER_MIDDLEWARES。

# settings/__init__ …

Continue reading