如何禁用Scrapy的RetryMiddleware?注释配置后仍未生效
彻底禁用Scrapy的RetryMiddleware解决方案
嘿,这个问题我之前也踩过坑!你注释掉配置行的操作其实没生效,原因在于Scrapy本身有一套默认启用的中间件集合,你只是取消了自己对它的自定义配置,但它依然会从默认配置里被加载进来。
为什么注释后还会加载?
Scrapy的中间件配置分为两部分:
DOWNLOADER_MIDDLEWARES_BASE:这是Scrapy内置的默认中间件列表,RetryMiddleware就默认在这个列表里,优先级是90。DOWNLOADER_MIDDLEWARES:这是用户自定义的配置,用来覆盖或补充默认配置。你注释掉自己配置里的RetryMiddleware行,相当于不对默认配置做任何修改,所以它还是会被启用。
正确的禁用方法
要彻底关掉它,你需要在DOWNLOADER_MIDDLEWARES里把它的值设为None,明确告诉Scrapy不要加载这个中间件。修改你的settings.py如下:
DOWNLOADER_MIDDLEWARES = { 'scrapy.downloadermiddlewares.retry.RetryMiddleware': None, # 明确禁用默认中间件 'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 110, }
这样配置后,Scrapy就会忽略默认配置里的RetryMiddleware,不会再加载它了。
验证是否生效的小技巧
你可以用Scrapy自带的命令查看当前生效的中间件:
scrapy settings --get DOWNLOADER_MIDDLEWARES
或者查看默认中间件列表,确认RetryMiddleware原本的状态:
scrapy settings --get DOWNLOADER_MIDDLEWARES_BASE
重新启动程序后,再看日志里的Enabled downloader middlewares列表,RetryMiddleware就不会出现在里面啦。
内容的提问来源于stack exchange,提问作者NeDark
相关产品推荐
相关产品推荐

