Прокси в Scrapy
HttpProxyMiddleware включён по умолчанию — достаточно положить строку подключения в meta запроса.
Минимальный паук
Отдельных настроек включать не нужно: HttpProxyMiddleware стоит в конвейере по умолчанию и читает ключ proxy из meta. Учётки идут прямо в адресе, как в обычной строке подключения.
import scrapy
class IpSpider(scrapy.Spider):
name = "ip"
proxy = "http://LOGIN__cr.de:PASSWORD@gw.dataimpulse.com:823"
def start_requests(self):
yield scrapy.Request(
"https://ipinfo.io/json",
meta={"proxy": self.proxy},
)
def parse(self, response):
self.logger.info(response.text)Что учесть при сборе
Повтор запроса на порту 823 придёт уже с другого адреса — это свойство ротации, а не сбой. Поэтому ретраи Scrapy работают здесь как надо, а вот привязываться к адресу между запросами нельзя: для этого есть липкие порты 10000–20000.
Ставьте DOWNLOAD_TIMEOUT с запасом: резидентный выход отвечает медленнее датацентрового, и запрос без таймаута может висеть минутами. Одновременных соединений тариф допускает до двух тысяч — упираться в них при обычном сборе не придётся.