2016-04-17 31 views
6

relativo codiceScrapy eliminare gli errori trattati

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 

Ho il mio proprio codice per il salvataggio dei codici di errore nel DB. Non voglio che vengano visualizzati nell'output del registro. Come posso sopprimere questi errori?

Nota che non voglio sopprimere tutti gli errori, solo quelli che vengono gestiti qui.

+0

vuoi dire cambiare il livello di registrazione? –

+0

No, vorrei semplicemente non visualizzare gli errori che sto ricevendo nel metodo 'handle_error' – HyderA

+0

Potrebbe essere che questi errori siano registrati anche prima che venga chiamato il gestore degli errori. – AKS

risposta

-1

Utilizzare un semplice tentativo, tranne che nella funzione. Finché gestisci l'eccezione da solo (aggiungendo righe al db, solo "pass", ...), twisted non riconoscerà l'errore. ad es.

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

Tenta di utilizzare self.skipped.add, self.failed.add con isinstance condizioni nel metodo handle_error.

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

Risposta da @Daniil Mashḳin sembra essere la soluzione più completa.

Per casi semplici, è possibile aggiungere codici di errore http Spider.handle_httpstatus_list o HTTPERROR_ALLOWED_CODES in Settings.py.

Questo invierà alcune risposte errate alla vostra funzione di callback, saltando quindi accedendo così