Come ruotare i proxy in Python (requests e aiohttp)
La rotazione è la differenza tra un scraper che fa bannare un IP e uno che distribuisce il carico su molti. Ecco un rotatore funzionante per richieste sincrone e async aiohttp, con controlli di salute e ritiro automatico di uscite morte.
Cosa risolve effettivamente la rotazione
I siti limitano e bloccano per IP. Se ogni richiesta proviene da un solo indirizzo, raggiungi rapidamente il limite e un singolo divieto ferma l'intero lavoro. La rotazione distribuisce le richieste su un pool di uscite, quindi il carico per IP rimane sotto la soglia e un'uscita morta o bloccata ti costa solo un nuovo tentativo, non l'intera esecuzione. Due design coprono quasi tutto: round-robin (ciclare attraverso il pool in ordine, prevedibile e uniforme) e random (scegliere per richiesta, semplice e senza stato).
Il pool stesso può provenire da due fonti. Puoi elencare diversi endpoint e porte s4m e ruotare tra di essi, oppure, per test rapidi a basso rischio, estrarre voci live dalla lista pubblica di proxy gratuita — filtrata per paese, protocollo e anonimato, anche se quei proxy di terze parti sono a tuo rischio e muoiono spesso. La rotazione in produzione dovrebbe basarsi su proxy di datacenter autenticati da s4m (SOCKS5 su 1080, HTTP su 3128, USER:PASS), che rimangono attivi e sono misurati, quindi scalare il pool è economico. Questo si basa direttamente su scraping con richieste.
Un rotatore per richieste e aiohttp
Un pool che utilizza round-robin, riprova in caso di errore e ritira le uscite che continuano a fallire. Versioni sync e async. Sostituisci 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())Scelte di design che contano
I controlli che decidono se la rotazione aiuta o aggiunge solo confusione.
Round-robin vs casuale
Il round-robin distribuisce il carico in modo uniforme ed è facile da comprendere; casuale è senza stato e semplice. Entrambi superano un'uscita fissa — scegli il round-robin quando la distribuzione uniforme è importante.
Ritira le uscite morte
Conta i fallimenti consecutivi per proxy e scarta un'uscita dopo alcuni tentativi, in modo che il pool si ripari da solo invece di riprovare un cadavere per sempre.
Controllo di salute prima dell'uso
Controlla periodicamente un endpoint di echo IP attraverso ogni proxy e conserva solo quelli che rispondono. Essenziale quando il pool include voci di lista gratuita volatili.
Allontanati, non correre
La rotazione non è una licenza per inondare. Aggiungi ritardi per host e backoff esponenziale in modo da rimanere sotto i limiti piuttosto che combatterli su molti IP.
Sessioni sticky e limiti onesti
La rotazione non è sempre ciò che desideri. Alcuni flussi — un login, un carrello, un modulo a più passaggi — necessitano dello stesso IP per l'intera sessione, altrimenti il sito vede un utente teletrasportarsi tra indirizzi e lo blocca. Questa è una sessione persistente: ruota tra i lavori, rimani fisso all'interno di uno. Quando un flusso di lavoro ha bisogno di un indirizzo garantito e stabile, aggiungi un IP personale dedicato invece di ruotare.
Sii onesto riguardo al limite. I proxy s4m sono datacenter, quindi ruotarli aiuta con i limiti di velocità e persino con il carico, ma non maschererà gli IP dei datacenter da un sistema anti-bot che blocca l'intero intervallo. La rotazione non fa nulla riguardo alle impronte digitali del browser o ai modelli di richiesta. Usalo come un livello: abbinalo a intestazioni realistiche, backoff e rispetto per le regole di ciascun sito. Per i pezzi asincroni avrai bisogno di aiohttp-socks per il supporto SOCKS5; valida le uscite con gli strumenti e automatizza la gestione delle credenziali tramite l'API.
Domande, risposte
Come ruotare i proxy con le richieste?
Tieni un elenco di URL proxy e scegline uno per richiesta — round-robin o casuale — passandolo come argomento proxies. Ritira un'uscita dopo alcuni fallimenti consecutivi in modo che il pool si ripari da solo. L'esempio sopra mostra un rotatore completo.
Come ruotare i proxy con aiohttp?
aiohttp imposta il proxy per richiesta per HTTP, ma per SOCKS5 costruisci un ProxyConnector (da aiohttp-socks) per ogni proxy e crei una sessione con esso. Distribuisci i compiti attraverso il pool con asyncio.gather.
Quando NON dovrei ruotare i proxy?
Quando un flusso di lavoro ha bisogno di un'identità consistente — accessi, carrelli, moduli multi-passaggio. Cambiare IP a metà sessione sembra sospetto e viene bloccato. Usa una sessione persistente o un IP dedicato per quei flussi.
I proxy datacenter rotanti eviteranno tutti i blocchi?
No. La rotazione distribuisce il carico e schiva i limiti di velocità per IP, ma gli intervalli dei datacenter possono comunque essere segnalati in blocco da sistemi anti-bot aggressivi, e la rotazione non cambia la tua impronta digitale del browser o il comportamento.
Ruota tra uscite reali
Amplia il tuo pool con proxy SOCKS5 e HTTP autenticati da datacenter su proxy.s4m.online, misurati quindi la scalabilità è economica. Aggiungi un IP dedicato per i passaggi di sessione persistente.
Le persone hanno trovato questa pagina cercando
- come ruotare i proxy in Python (requests e aiohttp)
- migliore proxy per scraping 2026
- proxy per scraping prezzo
- proxy per scraping
- che cos'è proxy http
- cosa sono i proxy ISP (residenziali statici)
- kill switch VPN su Windows
- proxy socks5 spiegato
- è lista di proxy gratuiti sicuro
- HTTP 407 autenticazione proxy richiesta
- lista di proxy gratuiti senza registrazione
- autenticazione proxy
Frasi di ricerca reali a cui questa pagina risponde — i collegamenti aprono la pagina che le tratta in dettaglio.