Промежуточное ПО прокси в Scrapy: значения, возвращаемые Request и None
Верните управление после назначения прокси в Scrapy, вместо того чтобы непреднамеренно заново планировать тот же запрос до его загрузки.
Адрес прокси меняется в журнале. Пункт назначения никогда не появляется в журнале доступа прокси. Проверьте, пропускает ли ваше промежуточное ПО запрос до загрузчика вообще.
В промежуточном ПО загрузчика Scrapy возврат Request означает повторное планирование этого запроса. Это не означает «продолжайте отправлять этот объект с метаданными, которые я только что изменил».
Для селектора, который выбирает только маршрут, важная форма такова:
def process_request(self, request):
request.meta['proxy'] = self.choose_proxy()
return None
Этот фрагмент показывает текущую форму перехватчика; используйте интерфейс промежуточного ПО, поддерживаемый установленной версией Scrapy. Селектор должен вернуть допустимую конечную точку и явно обработать недоступный пул. Публичный обход, разрешающий публичных посредников, может брать HTTP-кандидатов из списка HTTP-прокси для этого возвращаемого значения.
Возврат None позволяет остальному промежуточному ПО запросов и загрузчику продолжить. Возврат другого Request полезен, когда вы намеренно заменяете или повторяете работу, но требует причины и условия выхода.
Ротатор, который каждый раз возвращает один и тот же запрос, может многократно запускать собственный код выбора, так и не установив соединение с пунктом назначения. Увеличение тайм-аутов или открытие дополнительных портов прокси не исправит этот цикл управления.
Изучайте вход в промежуточное ПО, поведение при возврате и первую реальную сетевую попытку как отдельные события. Строка журнала «прокси выбран» доказывает только, что селектор сработал. Она не доказывает, что был отправлен запрос с выбранной конечной точкой.