Як робити ротацію проксі в Python (requests і aiohttp)
Ротація — це різниця між скрапером, що ловить бан на одну IP, і тим, який розподіляє навантаження між багатьма. Показуємо робочий ротатор для синхронного requests і асинхронного aiohttp, із перевіркою живучості й автоматичним виведенням мертвих вузлів.
Що насправді дає ротація
Сайти обмежують і банять за IP. Якщо всі запити виходять з однієї адреси, ліміт настає швидко, а один бан зупиняє всю роботу. Ротація розкидає запити по пулу виходів: навантаження на кожен IP лишається під порогом, а мертвий чи заблокований вихід коштує вам лише повторної спроби, а не всього запуску. Двох схем вистачає майже на все: round-robin (перебираємо пул по колу — передбачувано й рівномірно) та random (обираємо на кожен запит — просто й без стану).
Сам пул можна взяти з двох місць. Можна перелічити кілька ендпоінтів і портів s4m і ротувати між ними, а для швидких неважливих тестів — витягнути живі записи з безкоштовного публічного списку проксі з фільтрами за країною, протоколом і анонімністю; щоправда, ці сторонні проксі використовуються на власний ризик і часто вмирають. Продакшн-ротація має спиратися на автентифіковані проксі дата-центру від s4m (SOCKS5 на 1080, HTTP на 3128, USER:PASS): вони тримаються й тарифікуються за трафіком, тож розширювати пул дешево. Це пряме продовження гайда скрапінг за допомогою requests.
Ротатор для requests і aiohttp
Пул, який ходить по колу, повторює запит після збою та списує виходи, що падають раз за разом. Синхронна й асинхронна версії. Підставте свої USER:PASS.
import asyncio, itertools, random
import requests, aiohttp
from aiohttp_socks import ProxyConnector # pip install aiohttp-socks
USER, PASS, HOST = "USER", "PASS", "proxy.s4m.online"
POOL = [
f"socks5h://{USER}:{PASS}@{HOST}:1080",
f"http://{USER}:{PASS}@{HOST}:3128",
# add more endpoints/ports here to widen the pool
]
# ---------- Synchronous: requests + round-robin + retirement ----------
class Rotator:
def __init__(self, pool):
self.alive = list(pool)
self.fails = {p: 0 for p in pool}
self._cycle = itertools.cycle(self.alive)
def pick(self):
return next(self._cycle)
def retire(self, proxy):
self.fails[proxy] += 1
if self.fails[proxy] >= 3 and proxy in self.alive:
self.alive.remove(proxy)
self._cycle = itertools.cycle(self.alive or POOL)
def get(url, rot, retries=4):
for _ in range(retries):
proxy = rot.pick()
try:
r = requests.get(url, proxies={"http": proxy, "https": proxy},
timeout=(5, 20))
r.raise_for_status()
return r
except requests.RequestException:
rot.retire(proxy)
raise SystemExit("pool exhausted")
rot = Rotator(POOL)
print(get("https://api.ipify.org", rot).text)
# ---------- Async: aiohttp, one connector per proxy ----------
async def fetch(url, proxy):
connector = ProxyConnector.from_url(proxy)
async with aiohttp.ClientSession(connector=connector) as s:
async with s.get(url, timeout=aiohttp.ClientTimeout(total=25)) as r:
return await r.text()
async def main():
tasks = [fetch("https://api.ipify.org", random.choice(POOL))
for _ in range(5)]
for ip in await asyncio.gather(*tasks, return_exceptions=True):
print(ip)
asyncio.run(main())Рішення, які справді важать
Налаштування, від яких залежить, чи ротація допоможе, чи лише додасть метушні.
Round-robin проти random
Round-robin розподіляє навантаження рівномірно, і його легко тримати в голові; random не має стану й простіший. Обидва кращі за один фіксований вихід — беріть round-robin, коли важлива рівномірність.
Списуйте мертві виходи
Рахуйте невдачі поспіль для кожного проксі й викидайте вихід після кількох промахів — тоді пул лікує себе сам, а не б'ється вічно в мертву адресу.
Перевіряйте перед використанням
Періодично звертайтеся через кожен проксі до ендпоінта, що повертає ваш IP, і лишайте тільки ті, що відповідають. Обов'язково, якщо в пулі є нестабільні записи з безкоштовного списку.
Відступайте, а не женіть
Ротація — не дозвіл заливати сайт запитами. Додайте паузи для кожного хоста й експоненційний відступ, щоб триматися під лімітами, а не воювати з ними одразу з багатьох IP.
Липкі сесії та чесні межі
Ротація потрібна не завжди. Деякі сценарії — вхід в акаунт, кошик, багатокрокова форма — вимагають одного IP на всю сесію, інакше сайт бачить користувача, який телепортується між адресами, і блокує його. Це і є липка сесія: ротуйте між задачами й тримайте фіксований вихід усередині однієї. Коли процесу потрібна одна гарантовано стабільна адреса, замість ротації додайте виділений персональний IP.
Про стелю чесно. Проксі s4m — дата-центрові, тож ротація допомагає з лімітами запитів і рівномірним навантаженням, але не сховає IP дата-центру від антибот-системи, яка блокує весь діапазон. Ротація так само нічого не робить із відбитком браузера чи патернами запитів. Сприймайте її як один шар: додайте правдоподібні заголовки, відступи й повагу до правил кожного сайту. Для асинхронної частини знадобиться aiohttp-socks для підтримки SOCKS5; перевіряйте виходи інструментами, а роботу з обліковими даними автоматизуйте через API.
Відповіді на питання
Як ротувати проксі з requests?
Тримайте список URL проксі й обирайте один на кожен запит — по колу або випадково — передаючи його в аргументі proxies. Списуйте вихід після кількох невдач поспіль, щоб пул лікував себе сам. Приклад вище — повноцінний ротатор.
Як ротувати проксі з aiohttp?
Для HTTP aiohttp задає проксі на кожен запит, а для SOCKS5 доводиться створювати ProxyConnector (з aiohttp-socks) під кожен проксі й робити з ним сесію. Розкидайте задачі по пулу через asyncio.gather.
Коли ротувати проксі НЕ треба?
Коли процесу потрібна стала особистість — входи в акаунт, кошики, багатокрокові форми. Зміна IP посеред сесії виглядає підозріло й веде до блокування. Для таких сценаріїв беріть липку сесію або виділений IP.
Чи врятує ротація проксі дата-центру від усіх блокувань?
Ні. Ротація розподіляє навантаження й обходить ліміти на окремий IP, але агресивні антибот-системи можуть позначити діапазон дата-центру цілком, а відбиток браузера й вашу поведінку ротація не змінює.
Ротуйте по справжніх виходах
Розширте пул автентифікованими проксі SOCKS5 та HTTP дата-центру на proxy.s4m.online — з оплатою за трафік, тож масштабуватися дешево. Для кроків із липкою сесією додайте виділений IP.
Цю сторінку знаходять за запитами
- як робити ротацію проксі в Python (requests і aiohttp)
- кращі проксі для парсингу 2026
- проксі для парсингу ціна
- проксі для парсингу
- що таке http проксі
- що таке ISP-проксі (статичні резидентні)
- kill switch VPN у Windows
- socks5 проксі пояснення
- чи безпечний список безкоштовних проксі
- HTTP 407 proxy authentication required
- список безкоштовних проксі без реєстрації
- авторизація проксі
Реальні пошукові фрази, на які відповідає ця сторінка — за посиланнями відкриються матеріали, що розкривають тему глибше.