Jak rotować proxy w Pythonie (requests i aiohttp)
Rotacja to różnica między scraperem, który ma zbanowany jeden adres IP, a takim, który rozkłada obciążenie na wiele. Oto działający rotator zarówno dla synchronizowanych żądań, jak i asynchronicznego aiohttp, z kontrolą stanu i automatycznym wycofywaniem martwych wyjść.
Co rotacja faktycznie rozwiązuje
Serwisy ograniczają liczbę żądań i blokują po IP. Jeśli każde żądanie pochodzi z jednego adresu, szybko osiągasz limit, a pojedyncza blokada zatrzymuje całą pracę. Rotacja rozkłada żądania na pulę wyjść, dzięki czemu obciążenie na IP pozostaje poniżej progu, a jedno martwe lub zablokowane wyjście kosztuje cię tylko ponowne próby, a nie całą operację. Dwa projekty obejmują prawie wszystko: round-robin (cykl przez pulę w kolejności, przewidywalne i równe) oraz random (wybór na każde żądanie, proste i bezstanowe).
Pula sama w sobie może pochodzić z dwóch miejsc. Możesz wymienić kilka punktów końcowych s4m i portów i rotować między nimi, lub, dla szybkich testów o niskim ryzyku, pobierać na żywo wpisy z darmowej publicznej listy proxy — filtrowane według kraju, protokołu i anonimowości, chociaż te proxy zewnętrzne są używane na własne ryzyko i często padają. Rotacja produkcyjna powinna opierać się na uwierzytelnionych proxy z datacenter od s4m (SOCKS5 na 1080, HTTP na 3128, USER:PASS), które są stabilne i są mierzone, więc skalowanie puli jest tanie. To bezpośrednio opiera się na scrapingu z żądaniami.
Rotator dla żądań i aiohttp
Pula, która działa w trybie round-robin, ponawia próby w przypadku niepowodzenia i wycofuje wyjścia, które ciągle zawodzą. Wersje synchroniczne i asynchroniczne. Zastąp 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())Wybory projektowe, które mają znaczenie
Regulatory, które decydują, czy rotacja pomaga, czy tylko dodaje zamieszania.
Round-robin vs losowe
Round-robin równomiernie rozkłada obciążenie i jest łatwy do zrozumienia; losowy jest bezstanowy i prosty. Oba są lepsze niż jedno stałe wyjście — wybierz round-robin, gdy równomierne rozłożenie ma znaczenie.
Wycofaj martwe wyjścia
Zliczaj kolejne niepowodzenia dla każdego proxy i odrzucaj exit po kilku próbach, aby pula samoczynnie się regenerowała zamiast próbować w nieskończoność.
Sprawdzenie stanu przed użyciem
Okresowo uderzaj w punkt końcowy IP-echo przez każde proxy i zachowuj tylko te, które odpowiadają. Niezbędne, gdy pula zawiera zmienne wpisy z darmowej listy.
Cofnij się, nie sprintuj
Rotacja nie jest licencją na zalewanie. Dodaj opóźnienia na poziomie hosta i wykładnicze opóźnienie, aby pozostać poniżej limitów, zamiast walczyć z nimi na wielu IP.
Sticky sessions i szczere limity
Rotacja nie zawsze jest tym, czego chcesz. Niektóre przepływy — logowanie, koszyk, formularz wieloetapowy — potrzebują tego samego adresu IP przez całą sesję, w przeciwnym razie strona widzi użytkownika teleportującego się między adresami i blokuje to. To jest sesja trwała: rotuj między zadaniami, pozostawaj stały w jednym. Gdy przepływ pracy potrzebuje jednego gwarantowanego stabilnego adresu, dodaj dedykowany osobisty adres IP zamiast rotacji.
Bądź szczery co do ograniczeń. Proxies s4m są z centrum danych, więc ich rotacja pomaga w ograniczeniach prędkości i nawet obciążeniu, ale nie ukryje adresów IP z centrum danych przed systemem anty-botowym, który blokuje cały zakres. Rotacja również nic nie zmienia w kwestii odcisków przeglądarki czy wzorców żądań. Używaj tego jako jednej warstwy: połącz to z realistycznymi nagłówkami, opóźnieniem i poszanowaniem zasad każdej strony. Do asynchronicznych elementów będziesz potrzebować aiohttp-socks dla wsparcia SOCKS5; weryfikuj wyjścia za pomocą narzędzi i automatyzuj obsługę poświadczeń przez API.
Pytania, odpowiedzi
Jak obracać proxy z żądaniami?
Zachowaj listę adresów URL proxy i wybierz jeden na każde żądanie — round-robin lub losowo — przekazując go jako argument proxy. Wycofaj wyjście po kilku kolejnych niepowodzeniach, aby pula mogła się samodzielnie naprawić. Powyższy przykład pokazuje kompletny rotator.
Jak rotować proxy z aiohttp?
aiohttp ustawia proxy na żądanie dla HTTP, ale dla SOCKS5 budujesz ProxyConnector (z aiohttp-socks) dla każdego proxy i tworzysz sesję z nim. Rozłóż zadania po puli za pomocą asyncio.gather.
Kiedy NIE powinienem rotować proxy?
Gdy workflow wymaga spójnej tożsamości — logowania, koszyków, formularzy wieloetapowych. Zmiana adresów IP w trakcie sesji wygląda podejrzanie i jest blokowana. Użyj sesji sticky lub dedykowanego IP dla tych przepływów.
Czy rotacyjne proxy w centrum danych unikną wszystkich blokad?
Nie. Rotacja rozkłada obciążenie i omija limity na IP, ale zakresy centrów danych mogą być nadal oznaczane hurtowo przez agresywne systemy anty-botowe, a rotacja nie zmienia twojego odcisku palca przeglądarki ani zachowania.
Rotuj przez prawdziwe wyjścia
Poszerz swoją pulę o uwierzytelnione datacenter SOCKS5 i HTTP proxy na proxy.s4m.online, rozliczane, więc skalowanie jest tanie. Dodaj dedykowany IP dla kroków z sesją sticky.
Ludzie znaleźli tę stronę, szukając
- jak rotować proxy w pythonie (requests i aiohttp)
- najlepszy proxy do skrobania 2026
- proxy do skrobania cena
- proxy do skrobania
- co to jest proxy http
- czym są proxy ISP (statyczne mieszkalne)
- przełącznik zabicia VPN w systemie Windows
- proxy socks5 wyjaśnione
- czy lista darmowych proxy jest bezpieczne
- HTTP 407 wymagana autoryzacja proxy
- lista darmowych proxy bez rejestracji
- uwierzytelnianie proxy
Rzeczywiste frazy wyszukiwania, na które ta strona odpowiada — powiązane otwierają stronę, która je szczegółowo omawia.