【问题标题】:Scrapy - Downloader middleware not being loaded?Scrapy - 未加载下载器中间件?
【发布时间】:2017-07-06 04:30:13
【问题描述】:

我一直在尝试在我的 scrapy 项目中启用 Downloader 中间件,但它似乎根本没有被识别。我已经安装了一些第三方中间件,我不知道它是否正在使用。我什至尝试卸载中间件包并运行我的代码,它运行时没有引发任何错误,说该包不存在或任何因此造成混淆的错误。

我的 settings.py 中的所有内容都被正确使用,就像其他设置和参数一样正常显示,因为它们在 settings.py 中定义,但感觉就像下载器中间件根本不工作。

这是我的 settings.py 文件中的 downloader_middleware 代码

DOWNLOADER_MIDDLEWARE = {
    'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': None,
    'scrapy_fake_useragent.middleware.RandomUserAgentMiddleware': 110, #installed with pip
    'scrapy.downloadermiddlewares.retry.RetryMiddleware': 190,
    'scrapy_proxies.RandomProxy': 200, #installed with pip
    'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 210,
}

这是我运行scrapy crawl spider时的日志:

2017-07-06 12:46:20 [scrapy.middleware] INFO: Enabled downloader middlewares:
['scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware',
 'scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware',
 'scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware',
 'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware',
 'scrapy.downloadermiddlewares.retry.RetryMiddleware',
 'scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware',
 'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware',
 'scrapy.downloadermiddlewares.redirect.RedirectMiddleware',
 'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware',
 'scrapy.downloadermiddlewares.stats.DownloaderStats']

似乎 downlaoder_middleware 代码只是被忽略了,因为 UserAgentMiddleware 无论如何都被启用,而不管我安装了其他第三方中间件。

我也尝试过像这样在我的 spider.py 中使用自定义设置(自定义管道确实按预期工作)但是无论我是否有自定义设置,都会发生同样的事情:

custom_settings = {
        'ITEM_PIPELINES': {
            'someCustomPipeline': 300,
        },

        'DOWNLOADER_MIDDLEWARE': {
            'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': None,
            'scrapy_fake_useragent.middleware.RandomUserAgentMiddleware': 110, #installed with pip
            'scrapy.downloadermiddlewares.retry.RetryMiddleware': 190,
            'scrapy_proxies.RandomProxy': 200, #installed with pip
            'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 210,
        }
    }

【问题讨论】:

  • 设置名为DOWNLOADER_MIDDLEWARES,末尾带有“S”。
  • 我不敢相信我花了这么多时间试图弄清楚到底发生了什么,但我无法发现,谢谢!

标签: python scrapy middleware


【解决方案1】:

要禁用所有默认中间件,文档说您应该在您的DOWNLOADER_MIDDLEWARE 中明确地将DOWNLOADER_MIDDLEWARES_BASE 中的所有中间件设置为None。正如文档here中所说的那样?

【讨论】:

  • 我不太清楚你的意思,下载器中间件与蜘蛛中间件不是完全不同的东西吗?
  • 是的,我意识到了这一点。抱歉删除了这个答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-06
  • 1970-01-01
  • 1970-01-01
  • 2020-02-16
  • 1970-01-01
  • 2018-06-12
  • 1970-01-01
相关资源
最近更新 更多