Как настроить ротацию прокси в Scrapy
Встроенный HttpProxyMiddleware в Scrapy читает прокси из request.meta. С ротирующим шлюзом вы задаете один URL, и каждый запрос получает новый IP.
Шаги
- Оставьте HttpProxyMiddleware включенным (по умолчанию)
- Укажите meta={"proxy": url} в каждом запросе или в start_requests
- Укажите имя пользователя и пароль в URL прокси
- Уменьшите CONCURRENT_REQUESTS_PER_DOMAIN, если сайт все еще ограничивает запросы
Пример кода
import scrapy
PROXY = "http://USERNAME-cc-gb:PASSWORD@gw.gbproxies.cc:10000"
class PricesSpider(scrapy.Spider):
name = "prices"
start_urls = ["https://example.com/catalog"]
def start_requests(self):
for url in self.start_urls:
yield scrapy.Request(url, meta={"proxy": PROXY})
def parse(self, response):
for href in response.css("a.product::attr(href)").getall():
yield response.follow(href, self.parse_item, meta={"proxy": PROXY})
def parse_item(self, response):
yield {"title": response.css("h1::text").get(), "url": response.url}Замените USERNAME и PASSWORD на логин прокси со страницы Proxies в консоли. Порт 10000, резидентные HTTP; см. порты каждого продукта ниже.
Советы
- Отключите IMAGES_ENABLED и избегайте загрузки медиа, чтобы сэкономить GB
- Установите DOWNLOAD_TIMEOUT 30 и RETRY_TIMES 3 для стабильной работы
Частые вопросы
Нужен ли middleware для ротации?
Нет. Шлюз ротирует за вас; достаточно одного URL прокси.