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

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, 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")
            # зважений вибір за успішністю
            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 робочі дні.