2017-06-08 8 views
2

のスキャラーでクローラを作成しました。例外が発生した場合に退院を強制する方法

私はデータをデータベースに書き込む機能がパイプラインにあります。私は、ログモジュールを使用してランタイムログを記録します。

文字列が中国語の場合、logging.error()が例外をスローします。しかし、クローラは動作し続けます!

私はこれが軽微なエラーであることは知っていますが、重大な例外がある場合は、クローラが動作し続ける場合にはそれを見逃してしまいます。

私の質問は、例外が発生した場合にScrapyを強制的に強制停止できる設定はありますか?

答えて

1

あなたはCLOSESPIDER_ERRORCOUNT

を使用することができます:あなたがあなたのデータを挿入するときに、その後きちんとあなたがこのような特定のexeptionをキャッチした場合、あなたはスパイダー停止、 例外をキャッチすることができ、あなたの問題を解決するために

スパイダーを閉じる前に、 を受け取るエラーの最大数を指定する整数。スパイダーが 個以上のエラーを生成した場合は、理由コード closespider_errorcountで終了します。 0(または非設定)の場合、スパイダーはエラー数で を閉じません。デフォルトでは

は、あなたが最初のエラーを持っているときに終了したい場合は、にそれを変更することができます0 CLOSESPIDER_ERRORCOUNT = 0 に設定されています。

UPDATE

this questionの答えを読んで、あなたも使用することができます。詳細については、

crawler.engine.close_spider(self, 'log message') 

読み:

Close spider extension

+1

は、私は1つということ逃しました!良いオプション。 –

+0

こんにちはparik、私はあなたの答えは私が欲しいものだと思います。私はスパイダーに次のコードを追加しますが、うまくいきません:拡張機能= { # 'scrapy.extensions.telnet.TelnetConsole':なし、 'scrapy.extensions.closespider.CloseSpider': 100、 } CLOSESPIDER_ERRORCOUNT = 1 –

+0

@scotthuangはあなたの質問を更新し、試したことを記入してください。エラーメッセージ – parik

1

私はすべての例外でクローラを閉じてしまうの設定を知っていませんが、オプションの少なくともいくつ持っている:あなたはクモのコールバックでCloseSpider例外を発生させることができ

  • 、多分あなたをあなたが言及したその例外をキャッチ
  • crawler.engine.close_spider(spider, 'some reason')を呼び出すことができます。たとえば、拡張機能のようなクローラとスパイダーオブジェクトへの参照がある場合は、 how the CloseSpider extension is implementedを参照してください(CloseSpider例外と同じではありません)。 たとえば、これをspider_error信号でフックできます。あなたがspiderのインスタンスを持っているあなたのクモのprocess_item機能で
1

def process_item(self, item, spider): 
    try: 
     #Insert your item here 
    except YourExceptionName: 
     spider.crawler.engine.close_spider(self, reason='finished') 
関連する問題