Guia Python · 2 min de leitura

Como rotacionar proxies em Python (requests e aiohttp)

A rotação é a diferença entre um scraper que tem um IP banido e um que distribui a carga entre muitos. Aqui está um rotador funcional para solicitações síncronas e assíncronas aiohttp, com verificações de saúde e aposentadoria automática de saídas inativas.

O que a rotação realmente resolve

Sites limitam e banem por IP. Se cada solicitação vem de um único endereço, você atinge o limite rapidamente e um único banimento para todo o trabalho. Rotação distribui as solicitações por um pool de saídas, de modo que a carga por IP permaneça abaixo do limite e uma saída morta ou bloqueada custa apenas uma nova tentativa, não a execução. Dois designs cobrem quase tudo: round-robin (ciclo pelo pool em ordem, previsível e uniforme) e random (escolher por solicitação, simples e sem estado).

The pool itself can come from two places. You can list several s4m endpoints and ports and rotate across them, or, for quick low-stakes tests, pull live entries from the free public proxy list — filtered by country, protocol and anonymity, though those third-party proxies are use-at-your-own-risk and die often. Production rotation should lean on authenticated datacenter proxies from s4m (SOCKS5 on 1080, HTTP on 3128, USER:PASS), which stay up and are metered so scaling the pool is cheap. This builds directly on scraping with requests.

Um rotador para requisições e aiohttp

Um pool que faz round-robin, tenta novamente em caso de falha e desativa saídas que continuam falhando. Versões síncronas e assíncronas. Substitua USER:PASS.

python
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())

Escolhas de design que importam

Os controles que decidem se a rotação ajuda ou apenas adiciona churn.

Round-robin vs aleatório

Round-robin distribui a carga de forma uniforme e é fácil de entender; aleatório é sem estado e simples. Ambos superam uma saída fixa única — escolha round-robin quando a distribuição uniforme importa.

Remover saídas inativas

Conte falhas consecutivas por proxy e descarte uma saída após algumas tentativas, para que o pool se auto-repare em vez de tentar um corpo para sempre.

Verificação de saúde antes do uso

Periodicamente acesse um endpoint de eco de IP através de cada proxy e mantenha apenas os que respondem. Essencial quando o pool inclui entradas de lista livre voláteis.

Afaste-se, não corra

A rotação não é uma licença para inundar. Adicione atrasos por host e retrocesso exponencial para que você permaneça dentro dos limites em vez de lutar contra eles em muitos IPs.

Sessões fixas e limites honestos

A rotação nem sempre é o que você deseja. Alguns fluxos — um login, um carrinho, um formulário de múltiplas etapas — precisam do mesmo IP durante toda a sessão, ou o site vê um usuário se teletransportando entre endereços e bloqueia. Isso é uma sessão fixa: rotacione entre trabalhos, mantenha-se fixo dentro de um. Quando um fluxo de trabalho precisa de um endereço garantido e estável, adicione um IP pessoal dedicado em vez de rotacionar.

Seja honesto sobre o teto. Proxies s4m são datacenter, então rotacioná-los ajuda com limites de taxa e até mesmo carga, mas não disfarçará IPs de datacenter de um sistema anti-bot que bloqueia toda a faixa. A rotação também não faz nada sobre impressões digitais de navegador ou padrões de solicitação. Use isso como uma camada: combine com cabeçalhos realistas, diminuição de velocidade e respeito pelas regras de cada site. Para as partes assíncronas, você precisará de aiohttp-socks para suporte a SOCKS5; valide saídas com as ferramentas e automatize o manuseio de credenciais através da API.

FAQ

Perguntas, respondidas

Como faço para rotacionar proxies com solicitações?

Mantenha uma lista de URLs de proxy e escolha uma por solicitação — round-robin ou aleatório — passando-a como argumento de proxies. Aposente uma saída após algumas falhas consecutivas para que o pool se auto-repare. O exemplo acima mostra um rotator completo.

Como faço para rotacionar proxies com aiohttp?

aiohttp define o proxy por solicitação para HTTP, mas para SOCKS5 você constrói um ProxyConnector (do aiohttp-socks) por proxy e cria uma sessão com ele. Distribua tarefas pelo pool com asyncio.gather.

Quando eu NÃO devo rotacionar proxies?

Quando um fluxo de trabalho precisa de uma identidade consistente — logins, carrinhos, formulários de múltiplas etapas. Mudar de IP no meio da sessão parece suspeito e é bloqueado. Use uma sessão fixa ou um IP dedicado para esses fluxos.

Os proxies de datacenter rotativos evitarão todos os bloqueios?

Não. A rotação distribui a carga e evita limites de taxa por IP, mas faixas de datacenter ainda podem ser sinalizadas em massa por sistemas anti-bot agressivos, e a rotação não altera sua impressão digital ou comportamento do navegador.

Rotacione entre saídas reais

Amplie seu pool com proxies SOCKS5 e HTTP de datacenter autenticados em proxy.s4m.online, medidos para que a escalabilidade seja barata. Adicione um IP dedicado para as etapas de sessão fixa.

As pessoas encontraram esta página pesquisando por

Frases de busca reais que esta página responde — os links abrem a página que as cobre em profundidade.