Während meines Crawlings sind einige Seiten aufgrund einer unerwarteten Umleitung fehlgeschlagen und es wurde keine Antwort zurückgegeben. Wie kann ich diese Art von Fehler abfangen und eine Anfrage mit der ursprünglichen URL neu planen, nicht mit der umgeleiteten URL?Scrapy: Wie kann ich einen Download-Fehler erkennen und erneut herunterladen?
Bevor ich hier frage, mache ich eine Menge Suche mit Google. Es gibt zwei Möglichkeiten, dieses Problem zu beheben. Eine davon ist die Ausnahme in einer Download-Middleware, die andere besteht darin, die Download-Exception in einem Fehler in Spider's Request zu verarbeiten. Für diese beiden Fragen habe ich einige Fragen.
- Für Methode 1, ich weiß nicht, wie die ursprüngliche URL zu Process_Exception-Funktion übergeben. Unten ist der Beispielcode, den ich ausprobiert habe.
class ProxyMiddleware(object): def process_request(self, request, spider): request.meta['proxy'] = "http://192.168.10.10" log.msg('>>>> Proxy %s'%(request.meta['proxy'] if request.meta['proxy'] else ""), level=log.DEBUG) def process_exception(self, request, exception, spider): log_msg('Failed to request url %s with proxy %s with exception %s' % (request.url, proxy if proxy else 'nil', str(exception))) #retry again. return request
Bei Methode 2, ich weiß nicht, wie externe Parameter zu übergeben Funktion in der Spinne errback. Ich weiß nicht, wie ich die ursprüngliche URL von dieser Fehlerrückgabe-Funktion abrufen kann, um eine Anfrage neu zu planen.
Unten finden Sie das Beispiel, das ich mit der Methode versucht 2:
class ProxytestSpider(Spider): name = "proxytest" allowed_domains = ["baidu.com"] start_urls = ( 'http://www.baidu.com/', ) def make_requests_from_url(self, url): starturl = url request = Request(url, dont_filter=True,callback = self.parse, errback = self.download_errback) print "make requests" return request def parse(self, response): pass print "in parse function" def download_errback(self, e): print type(e), repr(e) print repr(e.value) print "in downloaderror_callback"
Jeder Vorschlag für diese erneute Suche Frage sehr geschätzt wird. Danke im Voraus.
Grüße
Bing
@ dabling1205, zeigen Sie uns, was Sie –
Die Post sieht ein Wurf unordentlich versucht haben, ich bin neu hier und nicht mit dem Format bearbeiten, :) – dabing1205