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

2024-07-09 1178阅读

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

【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购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]