如何强制scrapy-splash重试失败的项目?

时间:2017-02-28 21:52:16

标签: scrapy scrapy-splash splash-js-render

我正在使用scrapy-splash从Javascript驱动的IFRAMEd HTML页面中提取信息。有时,我的启动Javascript函数由于某些浏览器条件而失败,并返回错误消息,如{"error": "NotSupportedError: DOM Exception 9"})。

在我的项目管道中,我删除这些项目以保持结果清洁:

class NewspaperLayoutPipeline(object):
    def process_item(self, item, spider):
        if item.has_key('error'):
            raise DropItem("Error capturing item %s" % item)
            ...

不幸的是,我的错误项目率约为40%。因此,我想让scrapy-splash重试这些失败的网址,而不是简单地丢弃这些项目。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:0)

您无法在管道中重试项目。

您应该在Spider中写一张支票,然后再次yield Request(url, dont_filter=True)使用相同的网址

def parse(self, response):
    if item.has_key('error'):
        raise DropItem("Error capturing item %s" % item)
        yield Request(response.url, dont_filter=True)