Wie man Proxies in Python rotiert

Beherrschen Sie die Proxy-Rotation in Python, um IP-Sperren zu umgehen und Ihren Web-Scraping-Prozess zu optimieren.
11 min lesen
How to Rotate Proxies in Python blog image

In dieser Anleitung lernen Sie, wie man Proxys in Python dreht:

  • Was Proxys sind und warum sie verwendet werden
  • Was Proxy-Rotation ist und warum Sie sie brauchen könnten
  • Wie man Proxys in Python rotieren kann
  • Allgemeine Einschränkungen beim Drehen von Proxys in Python

Lasst uns eintauchen!

Was ist eine Vollmacht?

Ein Proxy ist ein Server, der als Vermittler zwischen einem Benutzer und einer Netzwerkressource über das Internet fungiert. Sie können sich einen Proxy also als Vermittler vorstellen, der Anfragen und Antworten zwischen den Parteien weiterleitet.

Warum Proxies in Python verwenden?

Wenn Sie eine Anfrage an eine Website über einen Proxy senden, geht die Anfrage zunächst durch den Proxy-Server. Dann leitet der Proxy Ihre Anfrage an die Website weiter, empfängt die Antwort und sendet sie an Sie zurück. Bei diesem Vorgang wird Ihre IP-Adresse für das Ziel verschleiert, so dass es so aussieht, als käme die Anfrage vom Proxy-Server und nicht von Ihrem Gerät.

Der typische Grund für die Verwendung eines Proxys ist die Automatisierung von Webanfragen oder Web Scraping. In diesem Szenario ist Python dank seiner umfangreichen Bibliotheken und der großen, aktiven Gemeinschaft eine der besten Sprachen für Web Scraping.

Was ist Proxy Rotation und warum brauchen Sie sie?

Wenn Sie zu viele Anfragen von einer einzigen IP-Adresse stellen, können Websites Sie durch Ratenbegrenzung oder regelrechte IP-Sperren blockieren. Hier kommt die Proxy-Rotation über Proxys zum Tragen.

Das systematische Umschalten zwischen verschiedenen Proxy-Servern bei Web-Anfragen ist eine der besten Möglichkeiten, die IP-Adress-Rotation zu implementieren. Dieses Verfahren hilft Ihnen, gängige Anti-Scraping-Techniken zu umgehen und bietet Ihnen die folgenden Vorteile:

  • Vermeidung von IP-Sperren: Verteilen Sie Anfragen auf mehrere IPs, damit Websites Ihre Scraping-Aktivitäten nicht so leicht erkennen und blockieren können.
  • Umgehung von Ratenbeschränkungen: Websites legen oft Anfragelimits pro IP-Adresse innerhalb eines bestimmten Zeitrahmens fest. Mit rotierenden Proxys können Sie das Scraping fortsetzen, selbst wenn Sie diese Grenzen auf einer IP-Adresse erreicht haben.
  • Zugriff auf geografisch eingeschränkte Inhalte: Einige Websites zeigen je nach geografischem Standort unterschiedliche Inhalte an. Die Proxy-Rotation mit Proxys aus verschiedenen Ländern ermöglicht Ihnen den Zugriff auf standortspezifische Inhalte.

Wie man Proxies in Python rotiert: 3 Herangehensweisen

Jetzt, wo Sie wissen, was Proxys sind und warum man sie drehen muss, können Sie sich auf einige Schritt-für-Schritt-Tutorials in Python freuen. In den nächsten Abschnitten erfahren Sie, wie Sie Proxys in Python mit verschiedenen Ansätzen und Bibliotheken rotieren können.

Die Zielseite für alle Skripte ist der Endpunkt /ip aus dem HTTPBin-Projekt. Dieser spezielle Endpunkt gibt die IP-Adresse des Aufrufers zurück und eignet sich daher hervorragend zum Testen, ob die vom Server gesehene IP-Adresse rotiert.

Zeit, einige Proxys in Python zu drehen!

Anforderungen

Um die Tutorials für rotierende Proxys mit Python nachzubilden, müssen Sie Python 3.7 oder höher auf Ihrem Rechner installiert haben.

Voraussetzungen

Angenommen, Sie nennen den Hauptordner Ihres Projekts proxy_rotation/. Am Ende dieses Schritts wird der Ordner die folgende Struktur haben:

proxy_rotation/
    ├── requests_file.py
    ├── async.py
    ├── scrapy_rotation/
    └── venv/ 

Wo:

  • requests.py und async.py sind Python-Dateien, die die Logik der Requests- bzw. AIOHTTP-Proxy-Rotation speichern.
  • scrapy_rotation/ ist ein Ordner, der ein Scrapy-Projekt enthält. Sie werden es später erstellen und instanziieren.
  • venv/ enthält die virtuelle Umgebung

Sie können das Verzeichnis venv/ virtual environment wie folgt erstellen:

python -m venv venv

Um es zu aktivieren, führen Sie unter Windows aus:

venv\Scripts\activate

Unter macOS und Linux führen Sie die gleiche Funktion aus:

source venv/bin/activate

Als letzte Voraussetzung müssen Sie eine Liste von Proxys abrufen. Für diesen Artikel können Sie unsere kostenlose Proxy-Liste verwenden.

Wie man Proxies in Python mit Requests rotieren kann

In diesem Abschnitt des Tutorials lernen Sie, wie Sie Proxies in Python mit Requests rotieren können.

Schritt #1: Abhängigkeiten installieren

In der aktivierten virtuellen Umgebung, installieren Sie Requests mit:

pip install requests

Schritt 2: Definieren Sie die Rotationslogik

Um Proxys in Python mit Requests zu drehen, schreiben Sie den folgenden Code in die Datei requests_file.py:

import random
import requests

# Define a list of proxies and return a random one
def get_random_proxy():
    proxies = [
        "http://PROXY_1:PORT_X",
        "http://PROXY_2:PORT_Y",
        "http://PROXY_3:PORT_X",
        # Add more proxies here...
    ]

    # Randomly pick a proxy
    return random.choice(proxies)

for i in range(3):
    proxy_url = get_random_proxy()
    proxies = {
        "http": proxy_url,
        "https": proxy_url,
    }
    response = requests.get("https://httpbin.io/ip", proxies=proxies)
    print(response.text)

Wo:

  • Die Funktion get_random_proxy() speichert die Liste der von Ihnen abgerufenen Proxys und gibt mit der Methode random.choice() einen Zufallswert zurück.
  • Die for-Schleife durchläuft die zufällig ausgewählte Liste der Proxys und führt die eigentliche Anfrage mit der Methode requests.get() aus. Weitere Informationen finden Sie in unserem Leitfaden zur Verwendung eines Proxys mit Python Requests.

Schritt #3: Starten Sie das Skript

Um das Skript zu starten, führen Sie es aus:

python requests_file.py

Nachstehend finden Sie die erwartete Antwort:

{
  "origin": "PROXY_3:PORT_K"
}
{
  "origin": "PROXY_1:PORT_N"
}
{
  "origin": "PROXY_2:PORT_P"
}

Wunderbar! Die Exit-IPs Ihres Skripts sind wie gewünscht gedreht worden.

Wie man in Python mit AIOHTTP Proxys rotieren lässt

Die Haupteinschränkung des randomisierten Ansatzes mit der Requests-Bibliothek besteht darin, dass jeweils ein Proxy verwendet wird. Das bedeutet, dass Sie warten müssen, bis jede Anforderung abgeschlossen ist, bevor der nächste Proxy verwendet wird.

Um diese Einschränkung zu umgehen, können Sie AIOHTTP verwenden. Diese Bibliothek ermöglicht es Ihnen, asynchrone Anfragen zu stellen und somit mehrere Proxys gleichzeitig auf nicht blockierende Weise zu verwenden. Mit anderen Worten: Sie können die Proxys in Ihrer Liste rotieren lassen, indem Sie asynchrone, parallele Anfragen an den Zielserver stellen. Sehen Sie AIOHTTP in Aktion in unserem Leitfaden zum asynchronen Web Scraping.

Der folgende Abschnitt zeigt, wie man Proxys in Python mit AIOHTTP rotieren kann.

Schritt #1: Abhängigkeiten installieren

In der aktivierten virtuellen Umgebung installieren Sie AIOHTTP mit:

pip install aiohttp

Schritt 2: Definieren Sie die Rotationslogik

Um Proxys in Python mit AIOHTTP zu drehen, schreiben Sie den folgenden Code in die Datei async.py:

import asyncio
import aiohttp

# Define a list of proxies
proxies_list = [
    "http://PROXY_1:PORT_X",
    "http://PROXY_2:PORT_Y",
    "http://PROXY_3:PORT_X",
    # Add more proxies here...
]

async def fetch_ip(session, proxy_address, attempt):
    print(f"Attempt {attempt} using proxy: {proxy_address}")
    async with session.get("https://httpbin.io/ip", proxy=proxy_address) as response:
        json_response = await response.json()
        print(f"Response from httpbin.io/ip (Attempt {attempt}):")
        print(f"IP Address: {json_response.get('origin', 'Unknown')}")
        print("-" * 40)
        return json_response

async def main():
    async with aiohttp.ClientSession() as session:
        tasks = []
        num_attempts = 3
        for i in range(num_attempts):
            # Rotate proxies using the modulus operator.
            proxy_address = proxies_list[i % len(proxies_list)]
            tasks.append(fetch_ip(session, proxy_address, i + 1))
        # Run all requests concurrently
        await asyncio.gather(*tasks)

# Launch the script
asyncio.run(main())

Dieser Code bewirkt Folgendes:

  • Die Funktion fetch_ip() verwaltet die Anfragen, indem sie die Sitzung, einen Proxy und die Versuchsnummer entgegennimmt. Insbesondere sendet sie eine GET-Anfrage an die Ziel-Website und gibt die Antwort aus.
  • Die Funktion main()
    : Polylang-Platzhalter nicht ändern

Schritt #3: Starten Sie das Skript

Um das Skript zu starten, führen Sie es aus:

python async.py

Dies ist die erwartete Reaktion:

Attempt 1 using proxy: http://PROXY_1:PORT_X
Attempt 2 using proxy: http://PROXY_2:PORT_Y
Attempt 3 using proxy: http://PROXY_3:PORT_Z

Response from httpbin.io/ip (Attempt 3):
IP Address: xxx.xxx.xxx.xxx
----------------------------------------
Response from httpbin.io/ip (Attempt 1):
IP Address: yyy.yyy.yyy.yyy
----------------------------------------
Response from httpbin.io/ip (Attempt 2):
IP Address: zzz.zzz.zzz.zzz
----------------------------------------

Erstaunlich! Die IPs werden wie erwartet rotiert.

Wie man Proxies mit Python Scrapy rotieren kann

In einem früheren Artikel haben wir die Möglichkeit diskutiert, Proxies in Python mit Scrapy zu rotieren, indem wir scrapy-rotating-proxies verwendeten.

In diesem Leitfaden erfahren Sie, wie Sie das tun können!

Schritt #1: Abhängigkeiten installieren

Installieren Sie in der aktivierten virtuellen Umgebung die erforderlichen Bibliotheken:

pip install scrapy scrapy-rotating-proxies

Schritt #2: Erstellen Sie ein neues Scrapy-Projekt

Im Hauptordner Ihres Repositorys(proxy_rotation/) legen Sie mit diesem Befehl ein neues Scrapy-Projekt an:

scrapy startproject scrapy_rotation

Dadurch wird ein neuer Unterordner mit dem Namen scrapy_rotation/ erstellt, der die folgende Struktur aufweist:

scrapy_rotation/
  ├── scrapy_rotation/ 
  │   ├── __init__.py
  │   ├── items.py # Defines the data structure for scraped items
  │   ├── middlewares.py # Custom middlewares
  │   ├── pipelines.py # Handles post-processing of scraped data
  │   ├── settings.py # Project settings
  │   └── spiders/ # Folder for all spiders
  └── scrapy.cfg # Scrapy configuration file

Wechseln Sie vom Hauptordner(proxy_rotation/) in den Ordner scrapy_rotation/:

cd scrapy_rotation

Sie können nun einen neuen Spider erstellen, der auf die Ziel-Website verweist, indem Sie ihn ausführen:

scrapy genspider rotation http://httpbin.io/ip

Dieses Skript erstellt auch die Datei rotation.py im Ordner spiders/.

Schritt #3: Definieren Sie die Rotationslogik

Die Logik der Proxy-Rotation kann durch Änderung der Datei settings.py mit den folgenden Einstellungen verwaltet werden:

# Enable the rotating proxies middleware
DOWNLOADER_MIDDLEWARES = {
    "rotating_proxies.middlewares.RotatingProxyMiddleware": 610,
    "rotating_proxies.middlewares.BanDetectionMiddleware": 620,
}

# List of proxies to rotate
ROTATING_PROXY_LIST = [
    "http://PROXY_1:PORT_X",
    "http://PROXY_2:PORT_Y",
    "http://PROXY_3:PORT_Z",
    # Add more proxies as needed
]

# Configure retry settings
RETRY_TIMES = 5  # Number of retries for failed requests
RETRY_HTTP_CODES = [500, 502, 503, 504, 408]  # HTTP codes to retry

Die Proxy-Rotation wird hier durch die Option rotating_proxies.middlewares.RotatingProxyMiddleware: 610 in DOWNLOADER_MIDDLEWARES gesteuert. Insbesondere wählt diese Option einen Proxy aus der ROTATING_PROXY_LIST aus und ordnet ihn jeder Anfrage zu.

Mit der Option rotating_proxies.middlewares.BanDetectionMiddleware: 620 kann der Scraper außerdem feststellen, ob eine IP-Adresse von der Ziel-Website gesperrt oder blockiert wurde. Wenn eine Anfrage aus diesem Grund fehlschlägt, wird die Middleware die Anfrage mit einem neuen Proxy erneut versuchen. Diese Option arbeitet also eng mit der RotatingProxyMiddleware zusammen, um sicherzustellen, dass gesperrte Proxys automatisch vermieden werden.

In der Datei rotation.py im Ordner spiders/ können Sie nun Folgendes schreiben:

import scrapy

class IpSpider(scrapy.Spider):
    name = "ip_spider"
    start_urls = ["http://httpbin.io/ip"]
    def parse(self, response):
        # Extract and print the IP address from the response
        ip = response.json().get("origin")
        self.log(f"IP Address: {ip}")

Diese Klasse instanziiert die gesamte Spinne und gibt die Antwort bei jeder Anfrage aus.

Schritt #4: Starten Sie das Skript

Um das Skript zu starten, müssen Sie den Namen der Klasse IpSpider() verwenden, also ip_spider:

scrapy crawl ip_spider

Die von Scrapy über die CLI zurückgegebenen Daten sind besonders vollständig. Wenn also alles gut gelaufen ist, finden Sie unter den anderen Informationen etwas wie dieses:

2025-02-18 14:55:17 [rotating_proxies.expire] DEBUG: Proxy <http://PROXY_1:PORT_X> is GOOD
2025-02-18 14:55:17 [scrapy.core.engine] DEBUG: Crawled (200) <GET http://httpbin.io/robots.txt> (referer: None)
2025-02-18 14:55:24 [rotating_proxies.middlewares] INFO: Proxies(good: 1, dead: 0, unchecked: 2, reanimated: 0, mean backoff time: 0s)

Einschränkungen der obigen Ansätze zur Proxy-Rotation in Python

Die oben erwähnten Methoden der Proxydrehung sind nützlich, aber mit einigen Einschränkungen verbunden:

  • Sie erfordern, dass Sie manuell eine Liste von Proxys abrufen und verwalten.
  • Es handelt sich um einen Standardcode.
  • Sie können dennoch zu IP-Sperren führen, wenn Sie keine hochwertigen Proxyserver verwenden.

Wenn Sie nach einer effizienteren und effektiveren Methode zur Handhabung der Proxy-Rotation in Python suchen, bietet Bright Data einige der besten rotierenden Proxys auf dem Markt. Mit nur einer einzigen Proxy-URL können Sie sie in Ihren HTTP-Client oder Ihre Scraping-Bibliothek integrieren. Damit entfällt die Notwendigkeit von Boilerplate-Code und manuellem Rotationsmanagement.

Weitere wichtige Vorteile dieses Ansatzes sind:

  • Automatische IP-Rotation mit konfigurierbaren Sticky-IPs
  • Zugang zu 150 million+ Millionen privater IPs
  • Geolokalisierungskontrolle über die Standorte der Proxyserver
  • Unterstützung für HTTP-, HTTPS- und SOCKS-Protokolle

Vereinfachen Sie Ihre Proxy-Verwaltung – entdecken Sie unsere automatisch rotierenden Proxys!

Schlussfolgerung

In diesem Artikel haben Sie gelernt, wie man Proxys in Python mit drei verschiedenen Bibliotheken dreht: Requests, AIOHTTP und Scrapy. Wie in den geführten Abschnitten oben gezeigt, ist der Prozess nicht komplex und erfordert nur wenige Zeilen Code.

Dieser Ansatz birgt jedoch einige Nachteile:

  • Der Code ist sehr umfangreich, so dass Ihr Skript weniger wartbar ist.
  • Sie müssen eine große Liste von Proxyservern verwalten und den Zugang zu ihnen ermöglichen.

Mit den automatisch rotierenden Proxys von Bright Data können Sie sich diese Mühe sparen – eine effizientere Lösung zum Rotieren von Proxys in Python.

Bright Data kontrolliert die besten Proxy-Server der Welt und betreut Fortune-500-Unternehmen und mehr als 20.000 Kunden. Sein Angebot umfasst eine breite Palette von Proxy-Typen:

Erstellen Sie noch heute ein kostenloses Bright Data-Konto und testen Sie unsere Proxys und Scraping-Lösungen!

Keine Kreditkarte erforderlich