2017-02-28 90 views
0

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

在我的项目管道我为了删除这些项目,以保持我的结果干净:

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

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

回答

0

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

你应该在你的蜘蛛写一张支票,然后yield Request(url, dont_filter=True)相同的URL再次

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

的感谢!两点评论:我正在使用没有dont_filter参数的SplashRequest。此外,我想设置最大数量的重试以避免无限循环。 – layoutanalysis

+0

它有兄弟。做一个简单的谷歌搜索,你会看到它。 – Umair