2016-04-17 9 views
6

odpowiedni kodScrapy eliminuje druk obsługiwane błędy

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 

mam mój własny kod do zapisywania kodów błędów w DB. Nie chcę, aby były wyświetlane w wynikach dziennika. Jak mogę ukryć te błędy?

Pamiętaj, że nie chcę tłumić wszystkich błędów - tylko te, które są tutaj obsługiwane.

+0

Masz na myśli zmianę poziomu rejestrowania? –

+0

Nie, chciałbym po prostu nie wyświetlać błędów, które otrzymuję w metodzie 'handle_error' – HyderA

+0

Może to wynikać z tego, że te błędy są rejestrowane jeszcze przed wywołaniem procedury obsługi błędów. – AKS

Odpowiedz

-1

Użyj prostej próby - z wyjątkiem swojej funkcji. Dopóki sam sobie poradzisz z wyjątkiem (dodając wiersze do bazy danych, po prostu "przekazać", ...), skręcona nie rozpozna błędu. np.

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

spróbuje użyć self.skipped.add, self.failed.add z isinstance stanie w sposób 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

Odpowiedz przez @Daniil Mashkin wydaje się być najbardziej wszechstronnym rozwiązaniem.

W prostych przypadkach można dodać kody błędów http Spider.handle_httpstatus_list lub HTTPERROR_ALLOWED_CODES w Settings.py.

Spowoduje to wysłanie błędnych odpowiedzi do funkcji zwrotnej, pomijając rejestrowanie