2017-02-28 12 views
0

私は、Javascript主導のIFRAMEd HTMLページから情報を抽出するために、scrapy-splashを使用しています。時々、私のスプラッシュ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%です。だから私は、単に落としてしまうのではなく、これらの失敗したURLをscrap-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

感謝! 2つの発言:私は、dont_filter引数を持たないSplashRequestを使用しています。また、無限ループを避けるために最大再試行回数を設定したいと思います。 – layoutanalysis

+0

それは仲間を持っています。シンプルなGoogle検索を実行すると、それが表示されます。 – Umair

関連する問題