Verwendung von Proxys zum Rotieren von IP-Adressen in Python

Erfahren Sie, wie Sie Proxys in Python für die IP-Rotation beim Web-Scraping verwenden können, wo Sie zuverlässige Proxys finden und welche Tipps es gibt, um Website-Sperren zu vermeiden.
8 min read
Python IP rotation

IP-Rotation mithilfe von Proxys ist beim Web-Scraping unerlässlich, insbesondere wenn es sich um moderne Websites handelt, die Einschränkungen auferlegen können. Die Verteilung Ihrer Anfragen auf mehrere IP-Adressen ist von entscheidender Bedeutung, um zu vermeiden, dass sie blockiert werden oder einer Ratenbegrenzung unterliegen. Das Rotieren von IP-Adressen macht es für Websites schwieriger, Ihre Scraping-Aktivitäten zu verfolgen und einzuschränken. Dies erhöht die Effizienz und Zuverlässigkeit Ihres Web-Scraping-Prozesses und ermöglicht es Ihnen, Daten effektiver zu extrahieren. Durch die Verwendung von Proxys und rotierenden IP-Adressen beim Web-Scraping können Sie IP-basierte Sperren und Strafen vermeiden, Ratenbeschränkungen überwinden und auf geografisch eingeschränkte Inhalte zugreifen.

In diesem Artikel wird erklärt, wie Sie Proxys in Ihrem Web-Scraping-Workflow implementieren, um die verwendeten IP-Adressen zu rotieren. Sie erfahren, wo Sie effektive Proxys erhalten, welche Tipps für die IP-Rotation gelten und wie Sie vermeiden können, von Ihrer Zielwebsite blockiert zu werden.

IP-Rotation mit Python

Ein regulärer Scraping-Prozess mit Python verwendet üblicherweise eine Python-Bibliothek wie Requests oder Scrapy , um auf eine Website zuzugreifen und deren Inhalt zu analysieren. Anschließend können Sie den Inhalt der Website nach den Informationen filtern, die Sie extrahieren möchten. Das Folgende ist ein Beispiel für einen typischen Scraping-Prozess:


import requests

url = 'http://example.com'

# Make requests 
response = requests.get(url)
print(response.text)

Dieser Prozess liefert Ihnen die Informationen, die Sie benötigen, und eignet sich gut für Einzelanwendungsfälle oder Fälle, in denen Sie Daten nur einmal extrahieren müssen. Er verwendet jedoch Ihre System-IP, um Anfragen zu stellen, und es kann zu Problemen mit wiederholten oder kontinuierlichen Anfragen kommen, bei denen die Website den Zugriff im Laufe der Zeit einschränkt.

Die Ergebnisse des Beispiel-Scraping-Prozesses lauten wie folgt:

<!doctype html>
<html>
<head>
    <title>Example Domain</title>

    <meta charset="utf-8" />
    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <style type="text/css">
    body {
        background-color: #f0f0f2;
        margin: 0;
        padding: 0;
        font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", "Open Sans", 
…

Die meisten Python-Bibliotheken, wie Requests oder Scrapy, die darauf abzielen, Webanfragen zu scrapen oder zu stellen, haben eine Möglichkeit, die IP-Adresse zu ändern, die für diese Anfragen verwendet wird. Um dies nutzen zu können, benötigen Sie jedoch eine Liste oder Quelle für gültige IP-Adressen. Diese Quellen können kostenlos oder kommerziell sein, z. B. Bright Data-Proxys.

Kommerzielle Optionen garantieren Gültigkeit und bieten hilfreiche Tools zur Verwaltung und Rotation Ihrer Proxys, um sicherzustellen, dass Ihr Scraping-Prozess nicht ausfällt. Bright Data hat beispielsweise mehrere Kategorien von Proxys mit unterschiedlichen Preisen, je nachdem, für welchen Anwendungsfall sie konzipiert sind, wie gut sie skalieren und wie sicher der entsperrte Zugriff auf Ihre angeforderten Daten ist:

Proxy-Dienste von Bright Data für nahtloses Daten-Scraping

Mit kostenlosen Proxys können Sie in Python eine Liste mit gültigen Proxys erstellen, die Sie während Ihres Scraping-Prozesses rotieren können:


proxies = ["103.155.217.1:41317", "47.91.56.120:8080", "103.141.143.102:41516", "167.114.96.13:9300", "103.83.232.122:80"]

Damit benötigen Sie lediglich einen Rotationsmechanismus, der verschiedene IP-Adressen aus der Liste auswählt, wenn Sie mehrere Anfragen stellen. In Python würde das der folgenden Funktion ähnlich aussehen:

import random
import requests

def scraping_request(url):

   ip = random.randrange(0, len(proxies))
   
   ips = {"http": proxies[ip], "https": proxies[ip]}
   response = requests.get(url, proxies=ips)
   print(f"Proxy currently being used: {ips['https']}")
   return response.text

Dieser Code wählt bei jedem Aufruf einen zufälligen Proxy aus Ihrer Liste aus. Der Proxy wird für Scraping-Anfragen verwendet.

Die Aufnahme eines Fehlerfalls zur Behandlung ungültiger Proxys würde dazu führen, dass der gesamte Scraping-Code wie folgt aussieht:

import random
import requests

proxies = ["103.155.217.1:41317", "47.91.56.120:8080", "103.141.143.102:41516", "167.114.96.13:9300", "103.83.232.122:80"]
def scraping_request(url):

   ip = random.choice(proxies)
   try:
      response = requests.get(url, proxies={"http": ip, "https": ip})
      if response.status_code == 200:   
         print(f"Proxy currently being used: {ip}")
   ip = random.randrange(0, len(proxies))
   
   ips = {"http": proxies[ip], "https": proxies[ip]}
   response = requests.get(url, proxies=ips)
   try:

      if response.status_code == 200:   
         print(f"Proxy currently being used: {ips['https']}")
         print(response.text)   

      elif response.status_code == 403:
         print("Forbidden client")

      elif response.status_code == 429:
         print("Too many requests")
         
   except Exception as e:
      print(f"An unexpected error occurred: {e}")

                
scraping_request("http://example.com")

Sie können diese rotierende Liste von Proxys auch verwenden, um Ihre Anfragen mit einem anderen Scraping-Framework wie Scrapy auszuführen.

Scrapen mit Scrapy

Mit Scrapy müssen Sie die Bibliothek installieren und die notwendigen Projektartefakte erstellen, bevor Sie das Web erfolgreich crawlen können.

Sie können Scrapy mit dem pip-Paketmanager in Ihrer Python-fähigen Umgebung installieren:

pip install Scrapy

Nach der Installation können Sie mit den folgenden Befehlen ein Scrapy-Projekt mit einigen Vorlagendateien in Ihrem aktuellen Verzeichnis generieren:

scrapy startproject sampleproject

cd sampleproject

scrapy genspider samplebot example.com

Diese Befehle generieren auch eine grundlegende Codedatei, die Sie mit einem IP-Rotationsmechanismus ausgestalten können.

Öffnen Sie die Datei sampleproject/spiders/samplebot.pysamplebot.py und aktualisieren Sie sie mit dem folgenden Code:


import scrapy
import random

proxies = ["103.155.217.1:41317", "47.91.56.120:8080", "103.141.143.102:41516", "167.114.96.13:9300", "103.83.232.122:80"]
ip = random.randrange(0, len(proxies))
   
class SampleSpider(scrapy.Spider):
    name = "samplebot"
    allowed_domains = ["example.com"]
    start_urls = ["https://example.com"]
    
    def start_requests(self):
        for url in self.start_urls:
            proxy = random.choice(proxies)
            yield scrapy.Request(url, meta={"proxy": f"http://{proxy}"})

    request = scrapy.Request(
        "http://www.example.com/index.html",
        meta={"proxy": f"http://{ip}"}
    )
    def parse(self, response):
        # Log the proxy being used in the request
        proxy_used = response.meta.get("proxy")
        self.logger.info(f"Proxy used: {proxy_used}") 
        print(response.text)

Führen Sie den folgenden Befehl oben im Projektverzeichnis aus, um dieses Scraping-Skript auszuführen:

scrapy crawl samplebot
Ausführen des Skripts

Tipps für die IP-Rotation

Web-Scraping hat sich zu einer Form des Wettbewerbs zwischen Websites und Scrapern entwickelt. Scraper entwickeln neue Methoden und Techniken, um an die benötigten Daten zu gelangen, und Websites finden neue Möglichkeiten, den Zugriff zu blockieren.

IP-Rotation ist eine Technik, die darauf abzielt, von Websites festgelegte Einschränkungen zu umgehen. Beachten Sie die folgenden Tipps, um die Effektivität der IP-Rotation zu maximieren und die Wahrscheinlichkeit zu minimieren, von Ihrer Zielwebsite blockiert zu werden:

  • Stellen Sie einen großen und vielfältigen Proxy-Pool sicher: Wenn Sie die IP-Rotation verwenden, benötigen Sie einen großen Proxy-Pool mit einer großen Anzahl von Proxys und einer Vielzahl von IP-Adressen. Diese Vielfalt trägt zu einer korrekten Rotation bei und verringert das Risiko einer übermäßigen Nutzung von Proxys, was zu Ratenbeschränkungen und Sperren führen könnte. Erwägen Sie die Verwendung mehrerer Proxy-Anbieter mit unterschiedlichen IP-Bereichen und Standorten. Erwägen Sie auch, den Zeitpunkt und die Intervalle zwischen Ihren Anfragen mit Ihren verschiedenen Proxys zu variieren, um das natürliche Nutzerverhalten besser zu simulieren.
  • Verfügen Sie über robuste Fehlerbehandlungsmechanismen: Während Ihres Web-Scraping-Prozesses können aufgrund vorübergehender Verbindungsprobleme, blockierter Proxys oder Änderungen an Ihrer Zielwebsite eine Reihe von Fehlern auftreten. Durch die Implementierung von Fehlerbehandlung in Ihren Skripten können Sie die reibungslose Ausführung Ihres Scraping-Prozesses sicherstellen, indem Sie häufige Ausnahmen wie Verbindungsfehler, Timeouts und HTTP-Statusfehler abfangen und behandeln. Erwägen Sie die Einrichtung von Schutzschaltern, um den Scraping-Prozess vorübergehend zu unterbrechen, wenn innerhalb kurzer Zeit eine große Anzahl von Fehlern auftritt.
  • Testen Sie Ihre Proxys vor der Verwendung: Bevor Sie Ihr Scraping-Skript in der Produktion einsetzen, verwenden Sie ein Beispiel Ihres Proxy-Pools, um die IP-Rotationsfunktionalität und die Fehlerbehandlungsmechanismen in verschiedenen Szenarien zu testen. Sie können Beispiel-Websites verwenden, um reale Bedingungen zu simulieren und sicherzustellen, dass Ihr Skript diese Fälle bewältigen kann.
  • Überwachen Sie die Leistung und Effizienz des Proxys: Überwachen Sie regelmäßig die Leistung Ihrer Proxys, um Probleme wie langsame Reaktionszeiten oder häufige Ausfälle zu erkennen. Sie sollten die Erfolgsquote jedes Proxys im Auge behalten, um ineffiziente Proxys zu identifizieren. Proxy-Anbieter wie Bright Data bieten Tools an, mit denen Sie den Zustand und die Leistung ihrer Proxys überprüfen können. Indem Sie die Proxy-Leistung überwachen, können Sie schnell zu zuverlässigeren Proxys wechseln und leistungsschwache Proxys aus Ihrem Rotationspool entfernen.

Web-Scraping ist ein iterativer Prozess, und Websites können ihre Struktur und Reaktionsmuster ändern oder neue Maßnahmen ergreifen, um Scraping zu verhindern. Überwachen Sie regelmäßig Ihren Scraping-Prozess und passen Sie sich an alle Änderungen an, um die Effektivität Ihrer Scraping-Maßnahmen aufrechtzuerhalten.

Fazit

In diesem Artikel wurde die IP-Rotation untersucht und wie sie in Ihren Scraping-Prozess mit Python implementiert werden kann. Sie haben auch einige praktische Tipps gelernt, um die Effektivität Ihres Scraping-Prozesses mit Python aufrechtzuerhalten.

Bright Data ist Ihre zentrale Plattform für Web-Scraping-Lösungen. Sie bietet hochwertige und ethische Proxys, einen Web-Scraping-Browser, eine IDE für Ihre Scraping-Bot-Entwicklung und -Prozesse, gebrauchsfertige Datensätze und mehrere Tools zum Rotieren und Verwalten von Proxys während des Scrapings.