Web Scraping ohne blockiert zu werden

Anleitung zum Scrapen von Websites, ohne blockiert zu werden. Lernen Sie neun verschiedene Lösungen zur Überwindung von Website-Scraping-Blockaden kennen.
13 min read
Web scraping without getting blocked

Web Scraping kann einem oft wie eine Schatzsuche vorkommen, bei der man das Web nach verborgenen Informationen, die nicht von APIs bereitgestellt werden, durchforstet. Und wie bei jeder guten Schatzsuche, gilt es auch hier, bestimmte Hürden zu überwinden.

Ein wesentliches Hindernis sind die von der Ziel-Website auferlegten Zugangssperren. Diese Sperren können verschiedene Gründe haben, z. B. strenge Scraping-Richtlinien, Bedenken im Zusammenhang mit dem Missbrauch von Ressourcen, Probleme mit der Reputation der IP-Quelle oder der Erkennung von (gefälschten) User-Agents.

Aber keine Angst, mit dieser Anleitung lernen Sie, wie Sie Web-Scraping betreiben können, ohne von der Ziel-Website blockiert zu werden, sodass Sie Ihren Schatz im Internet leicht finden können.

Strategies to Help You Avoid Access Blocks

Da Web Scraping ein komplexes Unterfangen ist, müssen Sie zur Vermeidung von Zugangssperren häufig mehrere Techniken anwenden. Im Folgenden finden Sie neun Strategien, mit denen Sie diese lästigen Blockaden umgehen können.

1. Verstehen Sie die Richtlinien und Nutzungsbedingungen der Ziel-Website

Wenn Sie beginnen, eine neue Website zu scrapen, müssen Sie sich mit ihr vertraut machen und nicht nur die HTML-Struktur der Seite kennen. Dazu gehört auch, dass Sie sich mit den Richtlinien und Nutzungsbedingungen der Website, die Sie scrapen möchten, vertraut machen. Dabei geht es oft darum, welche Haltung die Website gegenüber Web Scraping einnimmt, ob sie Scraping zulässt und welche spezifischen Seiten Sie scrapen dürfen. Die Nichteinhaltung dieser Bedingungen führt dazu, dass Sie gesperrt werden und sich möglicherweise einem rechtlichen Risiko aussetzen.

Ein wichtiges Dokument, das Sie beachten sollten, ist die Datei robots.txt. Diese Datei befindet sich im Stammverzeichnis der Website und enthält Anweisungen für Web-Roboter darüber, welche Teile der Website nicht gescannt oder verarbeitet werden dürfen.

Im Folgenden finden Sie ein Beispiel für eine Datei robots.txt:

User-agent: *
Disallow: /private/
Disallow: /temp/

In diesem Fall weist die Datei robots.txt alle Web-Roboter (gekennzeichnet durch das Zeichen * nach User-Agent) an, das Scraping der Verzeichnisse private und temp zu verhindern.

Zum rechtmäßigen Web Scraping gehört, dass Sie sich an die Richtlinien der jeweiligen Website halten.

2. Halten Sie die ethischen Standards für das Web-Scraping ein

So wie Sie die Richtlinien einer Website einhalten sollten, ist es auch ratsam, dass Sie sich an den jeweiligen Verhaltenskodex halten. Ethische Standards für das Web-Scraping tragen nicht nur dazu bei, dass Sie nicht blockiert werden, sondern auch dazu, dass Sie die Rechte und Ressourcen Ihrer Ziel-Website achten.

Es ist von entscheidender Bedeutung, dass Sie die folgenden Leitlinien beachten:

  • Belästigen Sie die Server nicht mit unaufhörlichen Anfragen: Lassen Sie zwischen den einzelnen Anfragen genügend Zeit verstreichen. Einige Websites erkennen und blockieren möglicherweise Web-Scraper, die schnell große Datenmengen extrahieren, weil dies nicht dem menschlichen Verhalten entspricht. Um natürlicher zu wirken und die Gefahr, blockiert zu werden zu verringern, ist es ratsam, die Anfragen mit einer Zeitverzögerung zu versehen. Um menschliches Verhalten besser nachzuahmen, sollten Sie anstelle von regelmäßigen Zeitverzögerungen unregelmäßige Intervalle verwenden.
  • Erheben Sie keine personenbezogenen Daten ohne Zustimmung: Dies ist nicht nur eine ethische, sondern oft auch eine rechtliche Frage. Vergewissern Sie sich stets, dass Sie über die erforderlichen Genehmigungen verfügen, bevor Sie personenbezogene Daten scrapen.
  • Gehen Sie achtsam mit den von Ihnen erfassten Daten um: Verwenden Sie die von Ihnen erfassten Daten verantwortungsvoll und rechtmäßig. Sorgen Sie dafür, dass Sie sich bei der Verwendung der Daten an alle geltenden Gesetze und Vorschriften, z. B. Urheberrechtsgesetze und die Allgemeine Datenschutzverordnung (GDPR), halten.

Nachfolgend wird beschrieben, wie Sie in Python unregelmäßige Intervalle zwischen den einzelnen Anfragen implementieren können:

import time
import random

urls = ['https://www.targetwebsite.com/page1', 'https://www.targetwebsite.com/page2', 'https://www.targetwebsite.com/page3']

for url in urls:
    response = requests.get(url)
    # Process response
    sleep_time = random.uniform(1, 10)  # Generate a random sleep time between 1 and 10 seconds
    time.sleep(sleep_time)  # Sleep for a random time between requests

Dieser Code durchläuft eine URl-Liste im URL-Array. Um URLs abzurufen, wird für jede einzelne URL eine Anfrage gestellt, und dann wird mit der Funktion time.sleep() eine Pause eingelegt, bevor mit der nächsten Anfrage fortgefahren wird. Diese zufälligen Intervalle tragen dazu bei, das menschliche Surfverhalten zu imitieren, wodurch die Wahrscheinlichkeit, entdeckt zu werden verringert wird.

3. (Rotierende) Proxys verwenden

Ein nützliches Werkzeug Ihres Web-Scraping-Toolkits sind Proxys, insbesondere rotierende Proxys. Ein Proxy dient als Gateway zwischen Ihnen und der Website, die Sie scrapen. Es maskiert Ihre IP-Adresse, sodass es so aussieht, als kämen Ihre Anfragen von verschiedenen Standorten.

Rotierende Proxys gehen noch einen Schritt weiter. Anstelle einer einzigen Proxy-IP wird Ihnen ein Pool von IP-Adressen zur Verfügung gestellt. Ihre Anfragen rotieren durch diese IPs und verändern ständig Ihr digitales Erscheinungsbild. Da es für eine Website so viel schwieriger ist, bestimmte Muster bei den Anfragen zu erkennen, wird die Wahrscheinlichkeit, dass Ihr Scraper entdeckt und blockiert wird, erheblich verringert.

Außerdem tragen rotierende Proxys dazu bei, Ihre Anfragen auf mehrere IPs zu verteilen, wodurch das Risiko verringert wird, dass eine einzelne IP-Adresse wegen zu vieler Anfragen gesperrt wird.

Nachfolgend finden Sie einen Codeschnipsel, der Ihnen bei der Implementierung eines rotierenden Proxys in Python hilft:

import requests
from itertools import cycle

# List of proxies
proxy_list = ['ip1:port1', 'ip2:port2', ...] 
proxy_pool = cycle(proxy_list) # create a cycle of proxies

url = 'https://www.targetwebsite.com'

for i in range(1,3):
    # Get a proxy from the pool
    proxy = next(proxy_pool)
    print(f"Request #{i}:")
    try:
        response = requests.get(url, proxies={"http": proxy, "https": proxy})
        print(response.content)
    except:
        # Most free proxies will often get connection errors, so we catch them here
        print("Connection error with proxy:", proxy)

Dieser Codeschnipsel verwendet eine Proxy-Liste(d. h proxy_list), die zyklisch durchlaufen wird, sodass jede Anfrage eine andere IP-Adresse hat. Dadurch wird es für Websites schwieriger, Ihre Web-Scraping-Aktivitäten zu erkennen.

Rotierende Proxys sind ein leistungsfähiges Instrument, aber sie sollten Teil einer umfassenderen Strategie sein. Um in den rauen Gewässern des Web Scraping zu navigieren, ohne blockiert zu werden, müssen Sie diese Techniken zusammen mit den anderen in diesem Artikel erwähnten Vorgehensweisen verwenden.

4. Verwenden Sie die richtigen Header und User-Agents

Websites verwenden oft Header und User-Agents, um Bots zu erkennen. Ein User-Agent (dt. „Benutzeragent“) ist ein Header, den Ihr Browser an den Server sendet und der Informationen über die Software und das System enthält, von dem die Anfrage ausgeht. Er enthält in der Regel Angaben über die Art der Anwendung, das Betriebssystem, den Softwarehersteller und die Softwareversion. Diese Informationen helfen dem Server, Inhalte zu liefern, die für Ihren speziellen Browser und Ihr System geeignet sind.

Beim Web Scraping ist es wichtig, legitime User-Agent-Strings (Zeichenketten) zu verwenden. Da Sie einen echten Benutzer imitieren, können Sie die Erkennungsmechanismen wirksam umgehen und die Wahrscheinlichkeit verringern, blockiert zu werden.

Zusätzlich zum User-Agent gibt es einen weiteren wichtigen Header, den Sie beachten sollten: den Referer-Header. DerReferer-Header gibt die URL der Website an, die mit der angeforderte Ressource verknüpft ist. Wenn Sie diesen in die Anfragen Ihres Scrapers einbeziehen, macht es den Anschein, dass ein menschlicher Benutzer von einer Seite zur anderen navigiert.

Andere hilfreiche Header, die Ihr Scraper enthalten kann, sind Accept-Language, Accept-Encodingund Connection. Diese Header werden in der Regel von Webbrowsern gesendet und sind nur selten Bestandteil von Scrapern. Da diese Header keinen direkten Einfluss auf das Abrufen von Webinhalten haben, werden sie von Scrapern normalerweise vernachlässigt. Die Einbeziehung dieser Elemente trägt jedoch dazu bei, die Anfragen des Scrapers echter aussehen zu lassen, wodurch die Wahrscheinlichkeit, entdeckt zu werden verringert wird.

Der folgende Python-Schnipsel legt den User-Agenten und den Referer im Header der Anfrage fest, um eine echte Browsing-Sitzung nachzuahmen:

url = 'https://www.targetwebsite.com'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36',
    'Referer': 'https://www.google.com/'
}

response = requests.get(url, headers=headers)

5. Wie Sie mit Honeypot-Fallen und Fehlern umgehen

Das Navigieren auf einer Website kann aufgrund von Hindernissen wie Honeypots eine Herausforderung sein. Honeypots sind verborgene Links, die absichtlich so gestaltet sind, dass sie von normalen Benutzern nicht bemerkt werden, aber von Scrapern und Bots sehr wohl entdeckt werden können. Diese Links werden oft mit HTML-Elementen versteckt, die auf hidden oder none gesetzt sind, oder sie werden als Schaltflächen getarnt, deren Farbe dem Hintergrund der Seite entspricht. Mit den Honeypots sollen Bots identifiziert und auf Schwarze Listen gesetzt werden.

Nachfolgend finden Sie ein einfaches Codeschnipsel, das Sie in Python verwenden können, um Honeypots zu umgehen:

from bs4 import BeautifulSoup
import requests

url = 'https://www.targetwebsite.com'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')

for link in soup.select('a'):
    if 'display' in link.get('style', '') and 'none' in link['style']:
        continue  # Skip this link
    # Process link

Dieser Code überspringt jeden Link mit display: none in seinem Style-Attribut, ein häufiges Merkmal von Honeypot-Links.

Da es nicht ungewöhnlich ist, dass Fehlermeldungen auftreten, ist es beim Scrapen von Daten außerdem wichtig, auf Fehler zu achten. Diese Fehler werden oft durch HTTP-Statuscodes im 4xx-Bereich (Client-Fehler) oder 5xx-Bereich (Server-Fehler) angezeigt. Ein angemessener Umgang mit diesen Fehlern ist sehr wichtig, um zu vermeiden, dass der Server mit übermäßigen Anfragen überlastet wird, was Blockierung auslösen könnte.

Eine wirksame Strategie zur Bewältigung solcher Fehler ist die Implementierung eines exponentiellen Backoff-Algorithmus. Bei diesem Ansatz wird das Zeitintervall zwischen den einzelnen Wiederholungsversuchen schrittweise vergrößert, was eine effizientere Fehlerbehandlung ermöglicht.

6. Verwenden Sie einen CAPTCHA-Lösungsdienst

Ein vollautomatischer öffentlicher Turing-Test zur Unterscheidung von Computern und Menschen (engl. „Completely Automated Public Turing test to tell Computers and Humans Apart“, CAPTCHA) ist eine Sicherheitsmaßnahme, die von vielen Websites eingesetzt wird, um automatisierte Bot-Aktivitäten, einschließlich Web Scraping, zu verhindern. CAPTCHAs sind so konzipiert, dass sie für Menschen leicht zu lösen sind, aber für Maschinen eine Herausforderung darstellen – daher der Name.

Wenn Sie auf CAPTCHAs stoßen, sollten Sie den Web Unlocker von Bright Data in Betracht ziehen. Dieser Service setzt verschiedene Methoden ein, darunter Algorithmen für das Maschinelle Lernen und sogar menschliche Löser, um CAPTCHA-Herausforderungen in Ihrem Namen zu entschlüsseln. Seine Aufgabe ist es, den CAPTCHA-Lösungsprozess zu automatisieren, damit Ihr Scraper ungehindert mit der Datenextraktion fortfahren kann.

7. Überwachen Sie Ratenbegrenzungen und Zugriffsverweigerungen

Die meisten Websites setzen Ratenbeschränkungen und Zugriffsverweigerungen durch, um ihre Ressourcen vor der Nutzung durch automatisierte Bots zu schützen. Da jede Anfrage, die Sie an einen Server senden, Ressourcen verbraucht, können Tausende von Bots, die jede Sekunde Anfragen senden, leicht einen Server zum Absturz bringen oder die Leistung einer Website beeinträchtigen. Um dies zu verhindern, setzen Websites Ratenbeschränkungen durch, und einige haben in ihren Antworten sogar einen X-RateLimit-Limit-Header, in dem die Ratenbeschränkungen aufgeführt sind. Um zu vermeiden, dass Sie blockiert werden, müssen Sie sich an diese Beschränkungen halten.

Der Server teilt diese Beschränkungen in der Regel durch HTTP-Statuscodes mit. Ein Statuscode von 200 bedeutet, dass alles reibungslos verlief, aber der Code429 bedeutet, dass Sie zu viele Anfragen in einer bestimmten Zeitspanne gesendet haben. 403 bedeutet, dass der Zugang verboten ist, und 503 zeigt an, dass der Server nicht verfügbar ist, möglicherweise aufgrund von Überlastung. Diese Codes zu kennen, ist für die Navigation bei der Datenextraktion unerlässlich.

Im Folgenden finden Sie ein Python-Schnipsel, das zur Einhaltung von Ratenbeschränkungen die Anfrage-Bibliothek verwendet:

import time
import requests

def respectful_requester(url, delay_interval=1):
    response = requests.get(url)
    # If the status code indicates rate limiting, sleep then retry
    if response.status_code == 429:
        print('Rate limit reached. Sleeping...')
        time.sleep(delay_interval)
        return respectful_requester(url, delay_interval)
    elif response.status_code != 200:
        print(f'Error: {response.status_code}. Try a different proxy or user-agent')
    
    return response

Diese Funktion sendet eine GET-Anfrage an eine URL und prüft die Antwort. Stößt sie auf den Statuscode 429, hält sie für eine bestimmte Zeitspanne inne und versucht dann die Anfrage erneut zu senden. Bei Bedarf können Sie für andere Statuscodes auch differenziertere Funktionen hinzufügen.

8. Scrapen Sie vom Google-Cache aus

Bei schwer zu scrapenden Websites oder nicht zeitkritischen Daten besteht ein alternativer Ansatz darin, Daten aus der von Google zwischengespeicherten Kopie der Website und nicht von der Website selbst abzurufen. Diese Technik kann besonders nützlich sein, wenn es um extrem schwierige Websites geht, die Web-Scraper aktiv blockieren. Diese zwischengespeicherten Websites können anstelle der ursprünglichen Websites gescrapt werden, wodurch verhindert wird, dass ein Anti-Scraping-Mechanismus ausgelöst wird. Denken Sie daran, dass diese Methode nicht narrensicher ist, da einige Websites Google anweisen, ihre Inhalte nicht zwischenzuspeichern. Außerdem sind die Daten aus dem Google-Cache möglicherweise nicht auf dem neuesten Stand.

Um eine Website aus dem Google-Cache zu scrapen, fügen Sie einfach die URL der Website am Ende von http://webcache.googleusercontent.com/search?q=cache: ein. Wenn Sie beispielsweise die Website von Bright Data scrapen möchten, können Sie die folgende URL verwenden: http://webcache.googleusercontent.com/search?q=cache:https://https://brightdata.com/.

Obwohl das Scraping aus dem Google-Cache zuverlässiger sein kann als das Scraping einer Website, die Ihre Anfragen aktiv blockiert, sollten Sie die Einschränkungen berücksichtigen und die Relevanz der zwischengespeicherten Daten überprüfen.

9. Verwenden Sie Proxys und Scraping-Dienste von Drittanbietern

Da das Katz-und-Maus-Spiel zwischen Web-Scrapern und Website-Administratoren immer spannender wird, wird es auch immer schwieriger, unauffällig ein effektives Web-Scraping zu betreiben. Websites entwickeln ständig neue Methoden, um Web-Scraper zu erkennen, zu verlangsamen oder zu blockieren, was einen dynamischen Ansatz zur Überwindung dieser Abwehrmechanismen erforderlich macht.

Manchmal ist es am besten, die schwierigen Aufgaben Fachleuten zu überlassen. An dieser Stelle zeichnen sich Proxys von Drittanbietern und Scraping-Dienste wie Bright Data aus. Bright Data ist in der Welt der Anti-Scraping-Technologien immer auf dem neuesten Stand und passt seine Strategien rasch an, um neue Hindernisse zu überwinden.

Bright Data bietet Lösungen, mit denen Sie menschliches Verhalten überzeugend nachahmen können, wie z. B rotierende Residential Proxys und automatisierte CAPTCHA-Lösungen, mit denen Sie Ihre Scraping-Bemühungen unbemerkt durchführen können. Bright Data´s Dienste sind außerdem skalierbar, sodass Sie die steigenden Anforderungen Ihrer Web-Scraping-Projekte mühelos bewältigen können.

Der Einsatz dieser Lösungen hilft Ihnen, Zeit und Ressourcen zu sparen. So können Sie sich auf andere Aufgaben konzentrieren, z. B. die Analyse der gewonnenen Daten und die Ableitung von Erkenntnissen daraus.

Fazit

An diesem Punkt haben Sie es geschafft, das tückische Terrain der Web-Scraping-Blockaden zu durchlaufen. Wenn Sie die Richtlinien Ihrer Ziel-Websites verstehen, ethische Scraping-Standards anwenden, Taktiken wie rotierende Proxys, geeignete Header und User-Agents einsetzen und mit Honeypot-Fallen und Fehlern umgehen können, sind Sie jetzt gut gerüstet, um Ihre Web-Scraping-Projekte einzurichten, ohne blockiert zu werden.

Denken Sie jedoch daran, dass auch die tüchtigsten Abenteurer ein zuverlässiges Instrumentarium benötigen. Hier kommt Bright Data ins Spiel. Die umfassenden Lösungen bieten eine breite Palette von Lösungen, die darauf zugeschnitten sind, Ihr Web Scraping zu optimieren. Verwenden Sie Bright Data´s Web Unlocker, um auf Daten zuzugreifen, die sich hinter CAPTCHAs verbergen. Um Ihre Anonymität zu wahren, haben Sie die Wahl verschiedener Proxy-Dienste, darunter robuste Proxy-Server, Datacenter Proxysund Residential Proxys.

Viel Spaß beim Scrapen!