Реализация прокси-ротации для парсинга

Наша компания занимается разработкой, поддержкой и обслуживанием сайтов любой сложности. От простых одностраничных сайтов до масштабных кластерных систем построенных на микро сервисах. Опыт разработчиков подтвержден сертификатами от вендоров.

Разработка и обслуживание любых видов сайтов:

Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Предлагаемые услуги
Показано 1 из 1 услугВсе 2065 услуг
Реализация прокси-ротации для парсинга
Средняя
от 1 рабочего дня до 3 рабочих дней
Часто задаваемые вопросы

Наши компетенции:

Этапы разработки

Последние работы

  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    874
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    851

Реализация прокси-ротации для парсинга

Прокси-ротация — обязательный компонент промышленного парсинга. Один IP-адрес неизбежно попадёт в блок при высокой частоте запросов. Задача системы ротации — автоматически распределять запросы по пулу адресов и выводить из ротации заблокированные.

Архитектура ротатора

Request → Proxy Selector
              ↓
         [Proxy Pool]
         192.168.1.1:8080  ← статус: OK, 245 запросов
         10.0.0.5:3128     ← статус: OK, 198 запросов
         172.16.0.2:8080   ← статус: BLOCKED, на карантине
              ↓
         Target Site
              ↓
         Response Checker
         (статус 200 → success / 403/429 → fail)

Реализация на Python

import asyncio
import aiohttp
from dataclasses import dataclass, field
from datetime import datetime, timedelta

@dataclass
class ProxyEntry:
    url: str
    success: int = 0
    fail: int = 0
    blocked_until: datetime = field(default_factory=lambda: datetime.min)

    @property
    def is_available(self):
        return datetime.now() > self.blocked_until

    @property
    def success_rate(self):
        total = self.success + self.fail
        return self.success / total if total > 0 else 0.5

class ProxyRotator:
    def __init__(self, proxies: list[str], quarantine_minutes=15):
        self.pool = [ProxyEntry(url=p) for p in proxies]
        self.quarantine = timedelta(minutes=quarantine_minutes)
        self._lock = asyncio.Lock()

    async def get(self) -> ProxyEntry:
        async with self._lock:
            available = [p for p in self.pool if p.is_available]
            if not available:
                raise RuntimeError("All proxies are blocked")
            # взвешенный выбор по success rate
            weights = [p.success_rate for p in available]
            return random.choices(available, weights=weights)[0]

    async def report(self, proxy: ProxyEntry, success: bool):
        async with self._lock:
            if success:
                proxy.success += 1
            else:
                proxy.fail += 1
                proxy.blocked_until = datetime.now() + self.quarantine

Интеграция с aiohttp

async def fetch(session, url, rotator):
    proxy = await rotator.get()
    try:
        async with session.get(url, proxy=proxy.url, timeout=10) as resp:
            if resp.status in (403, 429, 503):
                await rotator.report(proxy, success=False)
                return None
            await rotator.report(proxy, success=True)
            return await resp.text()
    except Exception:
        await rotator.report(proxy, success=False)
        return None

Источники прокси

Платные провайдеры (рекомендуется для серьёзных задач):

  • Bright Data — крупнейший пул резидентных прокси, 72M+ IP
  • Oxylabs — хорошее покрытие по СНГ, ISP-прокси
  • Smartproxy — мобильные и резидентные, разумные цены

Бесплатные списки — нестабильны, не подходят для промышленного парсинга.

Сроки

Система прокси-ротации с мониторингом: 2–3 рабочих дня.