Python-Leitfaden · 2 Min Lesezeit

Wie man Proxys in Python (requests und aiohttp) rotiert

Rotation ist der Unterschied zwischen einem Scraper, der eine IP sperrt, und einem, der die Last auf viele verteilt. Hier ist ein funktionierender Rotator für sowohl synchrone Anfragen als auch asynchrone aiohttp, mit Gesundheitsprüfungen und automatischer Stilllegung von toten Ausgängen.

Was Rotation tatsächlich löst

Sites begrenzen und sperren nach IP. Wenn jede Anfrage von einer Adresse ausgeht, erreichst du schnell das Limit und eine einzige Sperre stoppt den gesamten Job. Rotation verteilt Anfragen über einen Pool von Ausgängen, sodass die Last pro IP unter dem Schwellenwert bleibt und ein ausgefallener oder blockierter Ausgang dich nur einen erneuten Versuch kostet, nicht den gesamten Durchlauf. Zwei Designs decken fast alles ab: Round-Robin (in der Reihenfolge durch den Pool zirkulieren, vorhersehbar und gleichmäßig) und zufällig (pro Anfrage auswählen, einfach und zustandslos).

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.

Ein Rotator für Anfragen und aiohttp

Ein Pool, der im Round-Robin-Verfahren arbeitet, bei Fehlern erneut versucht und Ausgänge, die ständig fehlschlagen, zurückzieht. Synchron- und asynchrone Versionen. Ersetzen Sie 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())

Designentscheidungen, die wichtig sind

Die Regler, die entscheiden, ob Rotation hilft oder nur Unruhe verursacht.

Round-robin vs zufällig

Round-Robin verteilt die Last gleichmäßig und ist einfach zu verstehen; zufällig ist zustandslos und einfach. Beide sind besser als ein fester Ausgang — wählen Sie Round-Robin, wenn eine gleichmäßige Verteilung wichtig ist.

Tote Ausgänge zurückziehen

Zählen Sie aufeinanderfolgende Fehler pro Proxy und lassen Sie einen Ausgang nach ein paar Fehlern fallen, damit der Pool sich selbst heilt, anstatt ewig einen Leichnam zu wiederholen.

Gesundheitsprüfung vor der Nutzung

Periodisch einen IP-Echo-Endpunkt über jeden Proxy ansteuern und nur die behalten, die antworten. Essentiell, wenn der Pool volatile Einträge aus der kostenlosen Liste enthält.

Gehen Sie zurück, sprinten Sie nicht

Rotation ist keine Lizenz zum Fluten. Fügen Sie pro Host Verzögerungen und exponentielles Backoff hinzu, damit Sie unter den Grenzen bleiben, anstatt gegen sie über viele IPs zu kämpfen.

Sticky-Sitzungen und ehrliche Grenzen

Rotation ist nicht immer das, was Sie wollen. Einige Abläufe – ein Login, ein Warenkorb, ein mehrstufiges Formular – benötigen die gleiche IP für die gesamte Sitzung, oder die Seite sieht einen Benutzer, der zwischen Adressen teleportiert, und blockiert es. Das ist eine sticky session: wechseln Sie zwischen Jobs, bleiben Sie fest innerhalb eines. Wenn ein Workflow eine garantierte stabile Adresse benötigt, fügen Sie stattdessen eine dedizierte persönliche IP hinzu, anstatt zu rotieren.

Seien Sie ehrlich über die Obergrenze. s4m-Proxys sind Datacenter, daher hilft es, sie zu rotieren, um mit Ratenlimits und sogar Last umzugehen, wird jedoch die Datacenter-IPs nicht vor einem Anti-Bot-System verbergen, das den gesamten Bereich blockiert. Rotation hat auch keinen Einfluss auf Browser-Fingerabdrücke oder Anfrage-Muster. Verwenden Sie es als eine Schicht: kombinieren Sie es mit realistischen Headern, Backoff und Respekt für die Regeln jeder Seite. Für die asynchronen Teile benötigen Sie aiohttp-socks für SOCKS5-Unterstützung; validieren Sie Ausgänge mit den Tools und automatisieren Sie die Handhabung von Anmeldeinformationen über die API.

FAQ

Fragen, beantwortet

Wie rotiere ich Proxys mit Anfragen?

Führen Sie eine Liste von Proxy-URLs und wählen Sie eine pro Anfrage — Round-Robin oder zufällig — und übergeben Sie sie als Argumente für die Proxys. Ziehen Sie einen Exit nach ein paar aufeinanderfolgenden Fehlern zurück, damit sich der Pool selbst heilt. Das obige Beispiel zeigt einen vollständigen Rotator.

Wie rotiere ich Proxys mit aiohttp?

aiohttp setzt den Proxy pro Anfrage für HTTP, aber für SOCKS5 bauen Sie einen ProxyConnector (von aiohttp-socks) pro Proxy und erstellen eine Sitzung damit. Verteilen Sie Aufgaben über den Pool mit asyncio.gather.

Wann sollte ich Proxys NICHT rotieren?

Wenn ein Workflow eine konsistente Identität benötigt — Anmeldungen, Warenkörbe, mehrstufige Formulare. Das Wechseln der IPs während einer Sitzung sieht verdächtig aus und wird blockiert. Verwenden Sie eine sticky session oder eine dedizierte IP für diese Abläufe.

Werden rotierende Datacenter-Proxys alle Blockaden vermeiden?

Nein. Die Rotation verteilt die Last und umgeht die pro-IP-Datenlimits, aber Rechenzentrumsbereiche können dennoch von aggressiven Anti-Bot-Systemen im großen Stil markiert werden, und die Rotation ändert nicht Ihren Browser-Fingerabdruck oder Ihr Verhalten.

Über echte Ausgänge rotieren

Erweitern Sie Ihren Pool mit authentifizierten Datacenter SOCKS5- und HTTP-Proxys auf proxy.s4m.online, gemessen, sodass das Skalieren günstig ist. Fügen Sie eine dedizierte IP für die Schritte mit fester Sitzung hinzu.

Menschen fanden diese Seite durch die Suche nach

Echte Suchphrasen, auf die diese Seite antwortet — die verlinkten öffnen die Seite, die sie ausführlich behandelt.