【Scrapy】Scrapy 中间件等级设置规则

07-09 1177阅读


准我快乐地重饰演某段美丽故事主人

【Scrapy】Scrapy 中间件等级设置规则
(图片来源网络,侵删)

饰演你旧年共寻梦的恋人

再去做没流着情泪的伊人

假装再有从前演过的戏份

重饰演某段美丽故事主人

饰演你旧年共寻梦的恋人

你纵是未明白仍夜深一人

穿起你那无言毛衣当跟你接近

                     🎵 陈慧娴《傻女》


Scrapy 是一个功能强大的爬虫框架,通过使用中间件(middleware),用户可以自定义和扩展爬虫的行为。中间件提供了对请求和响应进行预处理和后处理的机制,使用户可以在不修改核心代码的情况下增强爬虫的功能。

在 Scrapy 中,中间件的执行顺序由它们的“等级”(priority)决定。了解和正确设置中间件的等级对于构建高效和可维护的爬虫至关重要。

什么是中间件?

中间件是 Scrapy 中的一种钩子,允许用户在处理请求和响应时执行自定义代码。中间件分为两类:

  • Downloader Middleware:处理下载器相关的请求和响应。
  • Spider Middleware:处理爬虫(spider)相关的输入和输出。

    中间件的等级

    中间件的等级决定了它们的执行顺序。Scrapy 使用一个整数值来表示中间件的等级,值越小,中间件越先执行。

    • 下载器中间件(Downloader Middleware)

      下载器中间件位于 Scrapy 的下载器和引擎之间。以下是一个示例配置:

      DOWNLOADER_MIDDLEWARES = {
          'myproject.middlewares.CustomDownloaderMiddleware': 543,
          'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': 400,
          'scrapy.downloadermiddlewares.retry.RetryMiddleware': 500,
      }
      

      在上述配置中:

      CustomDownloaderMiddleware 的等级为 543
      UserAgentMiddleware 的等级为 400
      RetryMiddleware 的等级为 500
      

      执行顺序如下:

      UserAgentMiddleware(400)
      RetryMiddleware(500)
      CustomDownloaderMiddleware(543)
      

      请求从引擎发出,先经过等级较低的中间件,最后到达下载器。响应从下载器返回时,先经过等级较高的中间件,最后到达引擎。

      爬虫中间件(Spider Middleware)

      爬虫中间件位于引擎和爬虫之间。以下是一个示例配置:

      SPIDER_MIDDLEWARES = {
          'myproject.middlewares.CustomSpiderMiddleware': 543,
          'scrapy.spidermiddlewares.httperror.HttpErrorMiddleware': 50,
          'scrapy.spidermiddlewares.offsite.OffsiteMiddleware': 500,
      }
      

      在上述配置中:

      CustomSpiderMiddleware 的等级为 543
      HttpErrorMiddleware 的等级为 50
      OffsiteMiddleware 的等级为 500
      

      执行顺序如下:

      HttpErrorMiddleware(50)
      OffsiteMiddleware(500)
      CustomSpiderMiddleware(543)
      

      请求从引擎发出,先经过等级较低的中间件,最后到达爬虫。响应从爬虫返回时,先经过等级较高的中间件,最后到达引擎。

      如何设置中间件的等级

      为了设置中间件的等级,需要在 Scrapy 的配置文件 settings.py 中定义相应的字典,指定中间件的路径和等级。例如:

      DOWNLOADER_MIDDLEWARES = {
          'myproject.middlewares.CustomDownloaderMiddleware': 543,
          'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': 400,
      }
      SPIDER_MIDDLEWARES = {
          'myproject.middlewares.CustomSpiderMiddleware': 543,
          'scrapy.spidermiddlewares.httperror.HttpErrorMiddleware': 50,
      }
      

      在这个例子中,我们定义了一个下载器中间件 CustomDownloaderMiddleware 和一个爬虫中间件 CustomSpiderMiddleware,并分别设置它们的等级为 543。

      常见的中间件及其默认等级

      Scrapy 提供了许多内置中间件,每个中间件都有默认的等级。以下是一些常见的下载器中间件及其默认等级:

      UserAgentMiddleware: 400
      RetryMiddleware: 500
      RedirectMiddleware: 600
      CookiesMiddleware: 700
      

      对于爬虫中间件,常见的有:

      HttpErrorMiddleware: 50
      OffsiteMiddleware: 500
      RefererMiddleware: 700
      

      结论

      中间件是 Scrapy 框架中一个强大的特性,通过正确设置中间件的等级,可以精细控制请求和响应的处理过程。理解和使用中间件的等级设置规则,有助于构建更加灵活和高效的爬虫系统。

VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]