失败后如何重试 scrapy 任务

pan*_*kaj 3 scrapy web-scraping

我对 Scrapy 比较陌生。我遇到了某些页面无法正确加载的情况。我想重试该任务两次以确保其正常工作。请注意,我没有收到 404 错误,但由于缺少某些元素,解析结果时失败。

这种情况仅发生在一百例中的少数,并且我无法重现它,因为下次重试时它会通过。(通过捕获整个响应正文进行验证)

处理这个问题的好方法是什么?

我尝试做

def parse(self, response):
    try:
        #do something
        yield result
    except:
        yield Request(response.url, callback=self.parse)
Run Code Online (Sandbox Code Playgroud)

但我认为这些被 Scrapy 过滤并识别为重复项。解决这个问题的最佳方法是什么?

Qia*_*ang 5

您应该使用errback处理程序scrapy.Request来代替。

这是示例:```

def start_requests(self):
    for url in self.start_urls:
        yield scrapy.Request(
            url=url,
            dont_filter=True,
            callback=self.apply_filter,
            errback=self.handle_failure)

def handle_failure(self, failure):
    self.log(failure, level=logging.ERROR)
    # try with a new proxy
    self.log('restart from the failed url {}'.format(failure.request.url))
    yield scrapy.Request(
        url=failure.request.url,
        callback=self.parse,
        errback=self.handle_failure)
Run Code Online (Sandbox Code Playgroud)

````