Einrichten der Umgebung
Bevor wir beginnen, stellen wir sicher, dass wir über die erforderlichen Tools verfügen. Laden Sie zunächst die neueste Version von Python von der offiziellen Website herunter und installieren Sie sie.
Für dieses Tutorial verwenden wir Visual Studio Code als unsere integrierte Entwicklungsumgebung (IDE), aber Sie können jede andere IDE Ihrer Wahl verwenden. Erstellen Sie einen neuen Ordner für Ihr Projekt und eine neue Datei index.py, in die wir unseren Code schreiben werden.
Öffnen Sie nun das Terminal und führen Sie den folgenden Befehl aus, um das für das Senden von Anfragen erforderliche Paket zu installieren:
pip install requests
Und das war’s schon! Wir können mit dem Programmieren beginnen.
Eine GET-Anfrage proxifizieren
Beginnen wir mit dem Senden einer einfachen GET-Anfrage. Schreiben Sie in die neu erstellte Datei „index.py“ den folgenden Code:
import requests
response = requests.get('https://api.ipify.org/?format=json')
print(response.text)
Führen Sie nun das Skript mit dem folgenden Befehl aus:
py index.py
Sie werden feststellen, dass das Ergebnis Ihre echte IP-Adresse ist und dass das Skript, egal wie oft Sie es ausführen, immer dasselbe Ergebnis anzeigt.
Der Zweck dieses Leitfadens ist es, dir zu zeigen, wie du deine echte IP-Adresse verbergen und bei jeder Ausführung des Skripts eine andere IP-Adresse erhalten kannst. Hier kommen die Proxys ins Spiel. Du findest sie unter folgender Struktur:
http://proxy_username:proxy_password@proxy_host:proxy_port
Das Protokoll kann entweder „http“, „https“, „socks4“ oder „socks5“ lauten, während „proxy_username“ und „proxy_password“ optional sind.
Der aktualisierte Code sollte wie folgt aussehen:
import requests
proxy_schema = {
"http": "http://proxy_username:proxy_password@proxy_host:proxy_port",
"https": "https://proxy_username:proxy_password@proxy_host:proxy_port"
}
URL = 'https://api.ipify.org/?format=json'
response = requests.get(URL, proxies=proxy_schema)
print(response.text)
Sie können die Proxy-Vorlage durch eine echte ersetzen, die von einem kostenlosen Proxy-Dienst bereitgestellt wird, nur zu Testzwecken. Es ist jedoch erwähnenswert, dass diese nicht zuverlässig sind und nur zu Testzwecken verwendet werden sollten.
Da selbst die besten Proxys manchmal instabil sein können, empfiehlt es sich, Ausnahmen in unserem Code zu behandeln:
try:
URL = 'https://api.ipify.org/?format=json'
response = requests.get(URL, proxies=proxy_schema, timeout=30)
print(response.text)
except:
print('Unable to connect to the proxy')
Wenn Sie einen funktionierenden kostenlosen Proxy gefunden haben, sollten Sie nach Ausführung des Codes feststellen, dass sich das Ergebnis geändert hat, da es sich nicht mehr um Ihre echte IP-Adresse handelt.
Proxys rotieren
Schauen wir uns nun an, wie wir mehrere Proxys nutzen können, um unsere Anfragen zu anonymisieren. Gleichzeitig kümmern wir uns um die Geschwindigkeit unseres Skripts. Wir senden die Anfragen asynchron unter Verwendung der Bibliothek „concurrent.futures“.
Nehmen wir zunächst an, wir haben die folgende Liste von Proxys (oder einen Proxy-Pool):
proxy_pool = [
"http://191.5.0.79:53281",
"http://202.166.202.29:58794",
"http://51.210.106.217:443",
"http://5103.240.161.109:6666"
]
Diese kann entweder fest codiert oder aus einer Datei gelesen werden – ganz nach Ihrer Wahl. Damit können wir den folgenden Code schreiben:
from concurrent.futures import ThreadPoolExecutor
with ThreadPoolExecutor(max_workers=8) as pool:
for response in list(pool.map(scrape_job, proxy_pool)):
pass
Wir initialisieren einen Thread-Pool mit maximal 8 Workern, um die Funktion „scrape_job“ (die wir gleich definieren) auszuführen, die als Parameter ein Element aus der Liste „proxy_pool“ erhält.
Nun stellt die Funktion „scrape_job“ den zuvor geschriebenen Code dar, mit einer kleinen Anpassung:
def scrape_job(proxy):
try:
URL = 'https://api.ipify.org/?format=json'
proxy_scheme = {
"http": proxy,
"https": proxy
}
response = requests.get(URL, proxies=proxy_scheme, timeout=30)
print(response.text)
except:
print('Unable to connect to the proxy')
Die Variable „proxy_scheme“ wird nun dynamisch zugewiesen, entsprechend dem Proxy, den wir als Parameter übergeben. Das Skript lässt sich auf mehrere URLs erweitern, mit einem spezifischen Timeout-Wert für jede einzelne.
Die Ausführung des Skripts sollte mehrere GET-Anfragen gleichzeitig senden, deren Ergebnis unterschiedliche IP-Adressen wären (sofern die kostenlosen Proxys funktionieren).
Skalierung
Wenn es darum geht, mit der Proxy-Rotation zu beginnen, gibt es einige wichtige Best Practices, die dazu beitragen können, dass Ihre Proxy-Rotation so effektiv wie möglich ist. Hier sind ein paar Tipps, die Sie beachten sollten:
Kostenlose Proxys sind ein No-Go
Kostenlose Proxy-Dienste mögen zwar wie eine kostengünstige Option erscheinen, sind jedoch oft unzuverlässig und können Ihre Scraping-Bemühungen sogar gefährden. Erwägen Sie die Investition in einen Premium-Proxy-Dienst, der ein höheres Maß an Sicherheit und Zuverlässigkeit bietet.
Vor dem Scraping testen
Bevor Sie mit dem Scraping beginnen, ist es ratsam, Ihre Proxy-Rotation zu testen, um sicherzustellen, dass sie wie vorgesehen funktioniert. So können Sie eventuelle Probleme erkennen und beheben, bevor sie später zu Schwierigkeiten führen.
Nutzen Sie User-Agent-Rotation
Die Rotation Ihrer IP-Adresse ist eine effektive Methode, um Anti-Scraping-Maßnahmen zu umgehen, aber sie ist nicht die einzige Technik, auf die Sie sich verlassen sollten. Die Kombination von IP-Rotation mit User-Agent-Rotation, die die Browsersignatur ändert, kann es für Websites noch schwieriger machen, Ihren Scraper zu erkennen und zu blockieren.
Premium-Proxy-Dienste
Nicht alle Proxy-Dienste sind gleich, daher ist es wichtig, dass Sie sich gut informieren und einen Anbieter wählen, der ein hohes Maß an Sicherheit und Zuverlässigkeit bietet. Suchen Sie nach einem Dienst, der eine große Auswahl an IP-Adressen und Standorten sowie Funktionen wie automatische IP-Rotation und anonymes Surfen bietet.
Verwenden Sie eine Web-Scraping-API
Die Verwendung einer Web-Scraping-API kann eine hervorragende Möglichkeit sein, den Prozess der Proxy-Rotation zu vereinfachen, insbesondere wenn Sie noch keine Erfahrung mit Web-Scraping haben. Eine gute Scraper-API übernimmt die Proxy-Rotation für Sie und bietet Ihnen eine übersichtliche und benutzerfreundliche Oberfläche für den Zugriff auf die benötigten Daten.
Ihr Proxy-Rotationsmechanismus verhindert Blockierungen gänzlich, und ihre umfangreiche Wissensdatenbank ermöglicht es, die Browserdaten zu randomisieren, sodass sie wie ein echter Nutzer aussehen.
Wenn Sie jedoch bei Ihrem eigenen Scraper bleiben möchten oder Ihr Anwendungsfall zu komplex ist, haben Sie auch die Möglichkeit, als Proxy auf die API zuzugreifen. Die Anfrage wird einfach an die API weitergeleitet, während Ihr Skript von der Proxy-Rotation profitiert.
Fazit
Zusammenfassend lässt sich sagen, dass das Wissen um die Proxy-Rotation eine wesentliche Technik für das Web-Scraping ist und Python die Umsetzung vereinfacht. Indem Sie die in diesem Leitfaden beschriebenen Schritte befolgt haben, haben Sie Einblicke gewonnen – von der Proxy-Weiterleitung einer einzelnen Anfrage bis hin zur Beschleunigung des Proxy-Rotationsprozesses.
Außerdem haben Sie einige zusätzliche Tipps zur Proxy-Rotation erhalten, wenn es darum geht, Ihr Projekt zu skalieren.
Denken Sie daran: Eine effektive Proxy-Rotation kann den Erfolg Ihrer Web-Scraping-Projekte erheblich steigern, und dieser Leitfaden hat Ihnen die Werkzeuge und das Wissen an die Hand gegeben, um dies wie ein Profi zu tun. Viel Spaß beim Scraping!




