Ich habe einige Proxies verwendet, um einige Website zu kriechen. Hier ist ich in der settings.py tatPython Scrapy nicht wiederholt nicht Timeout Verbindung
# Retry many times since proxies often fail
RETRY_TIMES = 10
# Retry on most error codes since proxies fail for different reasons
RETRY_HTTP_CODES = [500, 503, 504, 400, 403, 404, 408]
DOWNLOAD_DELAY = 3 # 5,000 ms of delay
DOWNLOADER_MIDDLEWARES = {
'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware' : None,
'myspider.comm.rotate_useragent.RotateUserAgentMiddleware' : 100,
'scrapy.contrib.downloadermiddleware.retry.RetryMiddleware': 200,
'myspider.comm.random_proxy.RandomProxyMiddleware': 300,
'scrapy.contrib.downloadermiddleware.httpproxy.HttpProxyMiddleware': 400,
}
Und ich habe auch eine Proxy-Download-Middleware, die folgenden Methoden:
def process_request(self, request, spider):
log('Requesting url %s with proxy %s...' % (request.url, proxy))
def process_response(self, request, response, spider):
log('Response received from request url %s with proxy %s' % (request.url, proxy if proxy else 'nil'))
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
Da der Proxy manchmal nicht sehr stabil ist, process_exception oft aufgefordert, ein Viele Anfragen fehlgeschlagen. Das Problem hierbei ist, dass die fehlgeschlagene Anforderung nie wieder versucht worden.
Wie die Vorher zeigt, habe ich die Einstellungen RETRY_TIMES und RETRY_HTTP_CODES festgelegt, und ich habe auch die Anforderung für einen Wiederholungsversuch in der process_exception-Methode der Proxy-Middleware zurückgegeben.
Warum scrapy nie wiederholt für das Scheitern Anfrage erneut, oder wie kann ich sicherstellen, dass die Anforderung mindestens RETRY_TIMES versucht wird, ich in der settings.py festgelegt haben?
Danke für die Antwort. Ich habe es versucht, aber nie erfolgreich. – David