2016-04-17 7 views
6

関連するコードはScrapyの抑制に処理エラー

def start_requests(self): 
    requests = [ Request(url['url'], meta=url['meta'], callback=self.parse, errback=self.handle_error) for url in self.start_urls if valid_url(url['url'])] 
    return requests 

def handle_error(self, err): 
    # Errors being saved in DB 
    # So I don't want them displayed in the logs 

私はDBにエラーコードを保存するために私自身のコードを持っています。私はそれらをログ出力に表示させたくありません。これらのエラーをどのように抑制できますか?

私はすべてのエラーを抑制したくないことに注意してください。ここではすべてのエラーを処理します。

+0

ログレベルを変更することを意味しますか? –

+0

いいえ、私は 'handle_error'メソッドで受け取っているエラーを表示しないだけです。 – HyderA

+0

エラーハンドラが呼び出される前でもこれらのエラーが記録されている可能性があります。 – AKS

答えて

-1

あなたの関数で単純なtry-exceptを使用してください。限り、自分自身で例外を処理する(データベースに行を追加する、単に "パス"、...)、ねじれはエラーを認識しません。例:

def handle_error(self, err): 
    try: 
     #do something that raises an exception 
     #twisted won't log this as long as you handle it yourself 
     myvar = 14/0 
    except: 
     pass 
1

は、あなたのhandle_error方法でisinstance条件でself.skipped.addself.failed.addを使用してみてください。 @Daniil Mashkinによって

Here is an example

def on_error(self, failure): 
    if isinstance(failure.value, HttpError): 
     response = failure.value.response 
     if response.status in self.bypass_status_codes: 
      self.skipped.add(response.url[-3:]) 
      return self.parse(response) 

    # it assumes there is a response attached to failure 
    self.failed.add(failure.value.response.url[-3:]) 
    return failure 
1

回答が最も包括的なソリューションであるように思われます。

単純なケースでは、httpエラーコードSpider.handle_httpstatus_listまたはHTTPERROR_ALLOWED_CODESSettings.pyに追加できます。

これは、コールバック関数にいくつかの誤った応答を送信するため、同様にロギングをスキップします。