Użyłem niektórych serwerów proxy do indeksowania niektórych witryn. Oto zrobiłem w settings.py:Python Scrapy nie ponawia połączenia z limitem czasu
# 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,
}
I mam również pobierania proxy pośredniczące, które mają następujące metody:
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
Ponieważ proxy nie jest bardzo stabilny czasami process_exception często skłania wiele komunikatów o błędach zgłoszeń. Problem polega na tym, że nieudana próba nigdy nie była próbowana ponownie.
Tak jak poprzednio, ustawiłem ustawienia RETRY_TIMES i RETRY_HTTP_CODES, a także zwróciłem prośbę o ponowną próbę w metodzie process_exception w pośredniej wersji serwera proxy.
Dlaczego scrapy nigdy nie ponawiają próby ponownego zgłoszenia żądania, lub jak mogę się upewnić, że żądanie zostało sprawdzone przynajmniej RETRY_TIMES ustawiłem w pliku settings.py?
Dzięki za odpowiedź. Próbowałem, ale nigdy nie udało mi się. – David