2017-02-28 42 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