Я записал промежуточное ПО:
def process_request(self, request, spider):
request = self.change_proxy(request) # set request proxy
def process_response(self, request, response, spider):
if response.status != 200:
self.delete_proxy() # remove unusable proxy
return request.copy() # send request to process_request to change proxy
return response
def process_exception(self, request, exception, spider):
self.delete_proxy() # remove unusable proxy
# if comment the code below, i will not get 302. but maybe i will lost crawl some webpage?
return request.copy() # send request to process_request to change proxy
Во-первых, у меня есть несколько прокси в Redis, что я хочу сделать:
- дать каждому запросу случайный прокси,
- при сбое подключения к прокси (вызвано исключение process_exception), измените новый прокси и повторно просмотрите веб-страницу.
- когда прокси-сервер запрещен сайтом (response.status! = 200), измените новый прокси-сервер и повторно просмотрите веб-страницу.
НО, когда я запускаю своего паука в течение нескольких минут, я всегда получаю 302 или всегда звонят process_exception
, почему? Если я перезапускаю своего паука, он работает нормально только в первые несколько минут ... (так что прокси ip в порядке, что не так с моим кодом?)
Как я могу сделать это правильно?