Durante la mia scansione, alcune pagine non sono riuscite a causa di reindirizzamenti imprevisti e nessuna risposta è stata restituita. Come posso rilevare questo tipo di errore e riprogrammare una richiesta con l'url originale, non con l'url reindirizzato?Scrapy: come rilevare l'errore di download e provare a scaricarlo di nuovo
Prima di chiedere qui, faccio molte ricerche con Google. Sembra che ci siano due modi per risolvere questo problema. uno è l'eccezione di catch in un middleware di download, l'altro è l'elaborazione dell'eccezione di download in errore nella richiesta di spider. Per queste due domande, ho alcune domande.
- Per il metodo 1, non so come passare l'url originale alla funzione process_exception. Di seguito è riportato il codice di esempio che ho provato.
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
Per il metodo 2, non so come passare parametri esterna per errback funzione nel ragno. Non so come recuperare l'url originale da questa funzione errback per riprogrammare una richiesta.
Di seguito l'esempio ho provato con il metodo 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"
Qualsiasi suggerimento per questo problema nuova scansione è molto apprezzato. Grazie in anticipo.
saluti
Bing
@ dabling1205, ci mostrano quello che hai provato –
Il post sembra una cucciolata disordinato, Sono nuovo di qui e non hanno familiarità con il formato di modifica, :) – dabing1205