您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

当项目获得空字段时,如何重试请求n次?

当项目获得空字段时,如何重试请求n次?

你可以使用Custom Retry Middleware来做到这一点,你只需要覆盖process_response当前Retry Middleware方法即可:

from scrapy.downloadermiddlewares.retry import RetryMiddleware
from scrapy.utils.response import response_status_message


class CustomRetryMiddleware(RetryMiddleware):

    def process_response(self, request, response, spider):
        if request.Meta.get('dont_retry', False):
            return response
        if response.status in self.retry_http_codes:
            reason = response_status_message(response.status)
            return self._retry(request, reason, spider) or response

        # this is your check
        if response.status == 200 and response.xpath(spider.retry_xpath):
            return self._retry(request, 'response got xpath "{}"'.format(spider.retry_xpath), spider) or response
        return response

然后启用它,而不是RetryMiddlewaresettings.py

DOWNLOADER_MIDDLEWARES = {
    'scrapy.downloadermiddlewares.retry.RetryMiddleware': None,
    'myproject.middlewarefilepath.CustomRetryMiddleware': 550,
}

现在,你有了一个中间件,你可以在其中配置,xpath以使用属性Spider内部重试retry_xpath

class MySpider(Spider):
    name = "myspidername"

    retry_xpath = '//h2[@class="tadasdop-cat"]'
    ...

当“项目”的字段为空时,这不一定会重试,但是你可以在此retry_xpath属性中指定该字段的相同路径以使其起作用。

其他 2022/1/1 18:18:16 有450人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶