2017-10-26 8 views
0

私はScrapyスパイダーとパイプライン設定を持っています。Pipeline.close_spider()メソッドでScrapyにエラーが発生したかどうかを確認するにはどうすればよいですか?

My SpiderはWebサイトからデータを抽出し、Pipelineのprocess_item()メソッドは抽出したデータを一時データベーステーブルに挿入します。

最後に、Pipelineのclose_spider()メソッドで、一時データベーステーブルでいくつかのエラーチェックを実行します。もし問題がなければ、一時テーブルを永続化します。

ただし、Pipelineのclose_spider()メソッドが呼び出される前にScrapyで例外が発生すると、抽出されたデータが不完全である可能性があります。

Pipelineのclose_spider()メソッドでScrapyが例外を検出したかどうかを確認する方法はありますか?エラー(抽出されたデータが不完全である可能性があることを示す)がある場合、私は一時テーブルを永続的にしたくありません。

CLOSESPIDER_ERRORCOUNTを1に設定したCloseSpider拡張機能を使用して、最初のエラーでSpiderを終了します。しかし、私は、Pipelineのclose_spider()メソッドで正常終了とエラー終了を区別する方法を理解していません。

答えて

0

私はScrapyのシグナルを使ってこれを行うことができました。他の誰かがこの問題に遭遇した場合、私はここに答えを掲示しています。

私はspider_errorシグナルを捕捉するために登録し、スパイダー自体にコールバックハンドラを提供しました。

コールバックはスパイダーにエラーが発生したことを示すフラグを設定します。

パイプラインのclose_spider()メソッドで、正常終了とエラー終了を区別するためにスパイダーにエラーフラグが設定されているかどうかを確認しました。

関連する問題