【发布时间】:2020-10-31 16:08:03
【问题描述】:
我正在抓取一个网站,我想在获得 50 倍响应状态时重试请求,但我得到了
忽略非 200 响应
我怎样才能摆脱它并重试请求几次(例如默认 3 次)或重试直到获得 200 响应状态。
DEBUG:scrapy.downloadermiddlewares.retry:Retrying <GET http://sample.com/> (failed 1 times): 502 Bad Gateway
DEBUG:scrapy.core.engine:Crawled (502) <GET http://sample.com/> (referer: None)
CRITICAL:security_daily_history:<twisted.python.failure.Failure scrapy.spidermiddlewares.httperror.HttpError: Ignoring non-200 response>
更新:
我的自定义重试中间件是:
class CustomRetryMiddleware(RetryMiddleware):
def process_response(self, request, response, spider):
super().process_response(request, response, spider)
return response
它应该像内置的RetryMiddleware 一样工作,但它没有,我在我的设置中设置了RETRY_TIMES = 4,但蜘蛛在失败1 次后忽略了502 状态。重现问题this link 总是返回 502 状态码。
我在设置中启用了我的自定义中间件:
DOWNLOADER_MIDDLEWARES = {
'scrapy.downloadermiddlewares.retry.RetryMiddleware': None,
'projectname.middlewares.CustomRetryMiddleware': 543,
}
【问题讨论】:
-
你应该
return super()...而不是return response
标签: python web-scraping scrapy web-crawler http-status-code-502