Web scraping 如何在Scrapy中将因503而导致的刮取失败标记为错误?

Web scraping 如何在Scrapy中将因503而导致的刮取失败标记为错误?,web-scraping,scrapy,scrapy-spider,http-status-codes,scrapy-settings,Web Scraping,Scrapy,Scrapy Spider,Http Status Codes,Scrapy Settings,所以我爬的时候状态是503。它会重试,但随后会被忽略。我希望它被标记为错误,而不是被忽略。怎么做 我更喜欢在settings.py中设置它,这样它就可以应用于我所有的爬行器句柄\u httpstatus\u列表似乎只会影响一个spider。有两个设置需要查看: 重试\u HTTP\u代码: 默认值:[500、502、503、504、408] 要重试的HTTP响应代码。始终重试其他错误(DNS查找问题、连接丢失等) 和HTTPERROR\u允许\u代码: 默认值:[] 通过包含在此列表中的非20

所以我爬的时候状态是503。它会重试,但随后会被忽略。我希望它被标记为错误,而不是被忽略。怎么做


我更喜欢在
settings.py中设置它,这样它就可以应用于我所有的爬行器<代码>句柄\u httpstatus\u列表
似乎只会影响一个spider。

有两个设置需要查看:

重试\u HTTP\u代码

默认值:[500、502、503、504、408]

要重试的HTTP响应代码。始终重试其他错误(DNS查找问题、连接丢失等)

HTTPERROR\u允许\u代码

默认值:[]

通过包含在此列表中的非200状态代码的所有响应


最后,我覆盖了重试中间件,只做了一个小改动。我设置为每当刮板放弃重试时,不管状态码是什么,它都会被标记为错误

似乎Scrapy并不认为放弃重试是一个错误。这对我来说很奇怪

如果有人想使用它,这就是中间件。不要忘记在
settings.py上激活它

from scrapy.downloadermiddlewares.retry import *

class Retry500Middleware(RetryMiddleware):

    def _retry(self, request, reason, spider):
        retries = request.meta.get('retry_times', 0) + 1

        if retries <= self.max_retry_times:
            logger.debug("Retrying %(request)s (failed %(retries)d times): %(reason)s",
                         {'request': request, 'retries': retries, 'reason': reason},
                         extra={'spider': spider})
            retryreq = request.copy()
            retryreq.meta['retry_times'] = retries
            retryreq.dont_filter = True
            retryreq.priority = request.priority + self.priority_adjust
            return retryreq
        else:
            # This is the point where I update it. It used to be `logger.debug` instead of `logger.error`
            logger.error("Gave up retrying %(request)s (failed %(retries)d times): %(reason)s",
                         {'request': request, 'retries': retries, 'reason': reason},
                         extra={'spider': spider})
从scrapy.downloadermiddleware.retry导入*
类Retry500Middleware(RetryMiddleware):
def_重试(自身、请求、原因、爬行器):
retries=request.meta.get('retry_times',0)+1

如果重试,我已尝试
HTTPERROR\u允许\u code=[503]
。不起作用。很抱歉