Cloudscraper in Python Schritt-für-Schritt-Anleitung

Lernen Sie, wie Sie Cloudscraper in Python verwenden, um den Schutz von Cloudflare zu umgehen, Fehler zu behandeln und alternative Lösungen für Anti-Bot-Systeme zu erkunden.
12 min lesen
Cloudscraper in Python blog image

In diesem Tutorial lernen Sie, wie Sie die Python-Bibliothek Cloudscraper verwenden, um die Bot-Erkennung von Cloudflare zu umgehen, häufige Fehler zu beheben und alternative Scraping-Lösungen für den robustesten Anti-Bot-Schutz zu erkunden.

Verwendung von Cloudscraper in Python

In diesem Tutorial versuchen Sie, Daten von einer durch Cloudflare geschützten Website mit und ohne Cloudscraper zu scrapen. Dazu verwenden Sie die Pakete Beautiful Soup undRequests. Wenn Sie mit diesen Paketen nicht vertraut sind, lesen Siediesen Python-Web-Scraping-Leitfaden, um mehr zu erfahren.

Installieren Sie zunächst die erforderlichen Pakete, indem Sie den folgenden pip -Befehl ausführen:

pip install tqdm==4.66.5 requests==2.32.3 beautifulsoup4==4.12.3

Um dieses Tutorial leichter verständlich zu machen, wurde der folgende Scraper erstellt, um Metadaten aus Nachrichtenartikeln zu extrahieren, die an einem bestimmten Tag auf derWebsite von ChannelsTV veröffentlicht wurden:

import requests
from bs4 import BeautifulSoup
from datetime import datetime
from tqdm.auto import tqdm

def extract_article_data(article_source, headers):
    response = requests.get(article_source, headers=headers)
    if response.status_code != 200:
        return None

    soup = BeautifulSoup(response.content, 'html.parser')

    title = soup.find(class_="post-title display-3").text.strip()

    date = soup.find(class_="post-meta_time").text.strip()
    date_object = datetime.strptime(date, 'Updated %B %d, %Y').date()

    categories = [category.text.strip() for category in soup.find('nav', {"aria-label": "breadcrumb"}).find_all('li')]

    tags = [tag.text.strip() for tag in soup.find("div", class_="tags").find_all("a")]

    article_data = {
        'date': date_object,
        'title': title,
        'link': article_source,
        'tags': tags,
        'categories': categories
    }

    return article_data

def process_page(articles, headers):
    page_data = []
    for article in tqdm(articles):
        url = article.find('a', href=True).get('href')
        if "https://" not in url:
            continue
        article_data = extract_article_data(url, headers)
        if article_data:
            page_data.append(article_data)
    return page_data

def scrape_articles_per_day(base_url, headers):
    day_data = []
    page = 1

    while True:
        page_url = f"{base_url}/page/{page}"
        response = requests.get(page_url, headers=headers)

        if not response or response.status_code != 200:
            break

        soup = BeautifulSoup(response.content, 'html.parser')
        articles = soup.find_all('article')

        if not articles:
            break
        page_data = process_page(articles, headers)
        day_data.extend(page_data)

        page += 1

    return day_data

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36',
}

URL = "https://www.channelstv.com/2024/08/01/"

scraped_articles = scrape_articles_per_day(URL, headers)
print(f"{len(scraped_articles)} Artikel wurden gescrapt.")
print("Beispiele:")
print(scraped_articles[:2])

In diesem Code sind drei Funktionen definiert, um den Scraping-Prozess zu vereinfachen. Die erste Funktion namens extract_article_data lädt Daten aus einem einzelnen Artikel und extrahiert Metadaten wie Veröffentlichungsdatum, Titel, Tags und Kategorien in ein Python-Wörterbuch, das dann zurückgegeben wird. Die Schritte zum Laden und Extrahieren werden mithilfe der Python-Bibliotheken Requests und Beautiful Soup implementiert.

Die zweite Funktion, process_page, ruft den Link zu allen Artikeln auf einer bestimmten Seite ab und ruft die Funktion extract_article_data auf, um die darin enthaltenen Daten zu extrahieren und jedes Metadaten-Wörterbuch in einer Liste zu speichern, die dann zurückgegeben wird. Die letzte Funktion mit dem Namen scrape_articles_per_day verwendet eine while-Schleife, um die Seitenzahl zu erhöhen und die Artikeldaten auf jeder Seite zu scrapen, bis Sie zu einer Seite gelangen, die nicht existiert.

Als Nächstes definieren Sie die zu scrapend URL und geben das Datum für den Filter als 1. August 2024 sowie eine Header-Variable mit einem Beispiel-User-Agent an. Sie rufen die Funktion scrape_articles_per_day auf und übergeben die URL- und Header-Variablen. Anschließend geben Sie die Anzahl der gescrapend Artikel und die ersten beiden Ergebnisse aus.

Im Idealfall würde dieser Scraper funktionieren, aber das tut er nicht, da die Website ChannelsTV Cloudflare verwendet, um zu verhindern, dass Sie über die in den Funktionenextract_article_dataundscrape_articles_per_dayimplementierten direkten Anfragen auf den Inhalt ihrer Webseiten zugreifen können.

Wenn Sie versuchen, dieses Skript auszuführen, sieht Ihre Ausgabe wie folgt aus:

0 Artikel wurden gescrapt.
Beispiele:
[]

Cloudscraper integrieren

Als Sie zuvor versucht haben, bestimmte Metadaten aus einem Artikel zu scrapen, wurde dank des Schutzes durch Cloudflare nichts zurückgegeben. In diesem Abschnitt installieren und verwenden Sie Cloudscraper, um dieses Problem zu umgehen.

Installieren Sie zunächst die Cloudscraper-Bibliothek, indem Sie den folgenden pip -Befehl ausführen:

pip install cloudscraper==1.2.71

Importieren Sie dann das Paket und definieren Sie eine fetch_html_content -Funktion wie folgt:

import cloudscraper

def fetch_html_content(url, headers):
    try:
        scraper = cloudscraper.create_scraper()
        response = scraper.get(url, headers=headers)

        if response.status_code == 200:
            return response
        else:
            print(f"Failed to fetch URL: {url}. Status code: {response.status_code}")
            return None
    except Exception as e:
        print(f"An error occurred while fetching URL: {url}. Error: {str(e)}")
        return None

Diese Funktion nimmt die zu scrappende URL und die Request-Header als Eingabeparameter und gibt entweder ein Response-Objekt oder None zurück. Innerhalb der Funktion definieren Sie einen try-except-Block. Im try-Block erstellen Sie einen Scraper mit der Methode cloudscraper.create_scraper. Als Nächstes rufen Sie die Methode scraper.get auf und übergeben die Variablen url und headers. Wenn der Statuscode Ihrer Antwort 200 ist, geben Sie die Antwort zurück. Andernfalls geben Sie eine Fehlermeldung aus und geben None zurück. Wenn im try-Block ein Fehler auftritt, wird ebenfalls der except-Block ausgelöst, in dem eine entsprechende Meldung ausgegeben und None zurückgegeben wird.

Anschließend ersetzen Sie jeden Aufruf von requests.get in Ihrem Skript durch diese Funktion fetch_html_content. Führen Sie diese Ersetzung zunächst in Ihrer Funktion extract_article_data wie folgt durch:

def extract_article_data(article_source, headers):
    response = fetch_html_content(article_source, headers)

Ersetzen Sie dann den Aufruf von requests.get in Ihrer Funktion scrape_articles_per_day wie folgt:

def scrape_articles_per_day(base_url, headers):
    day_data = []
    page = 1

    while True:
        page_url = f"{base_url}/page/{page}" 
        response = fetch_html_content(page_url, headers)

Durch die Definition dieser Funktion kann Ihnen die Cloudscraper-Bibliothek dabei helfen, die Einschränkungen von Cloudflare zu umgehen.

Wenn Sie den Code ausführen, sieht Ihre Ausgabe wie folgt aus:

Fehler beim Abrufen der URL: https://www.channelstv.com/2024/08/01//page/5. Statuscode: 404
55 Artikel wurden gescrapt.
Beispiele:
[{'date': datetime.date(2024, 8, 1),
  'title': 'Resilienz, Tränengas, Plünderungen, Ausgangssperre während der #EndBadGovernance-Proteste',
  'link': 'https://www.channelstv.com/2024/08/01/tear-gas-resilience-looting-curfew-as-endbadgovernance-protests-hold/',
  'tags': ['Eagle Square', 'Hunger', 'Plünderungen', 'MKO Abiola Park', 'Gewalt'],
  'categories': ['Headlines']},
 {'date': datetime.date(2024, 8, 1),
  'title': 'Mutter des russischen Künstlers, der im Rahmen eines Gefangenenaustauschs freigelassen wurde, wartet darauf, ihn zu „umarmen”',
  'link': 'https://www.channelstv.com/2024/08/01/mother-of-russian-artist-freed-in-prisoner-swap-waiting-to-hug-her/',
  'tags': ['Gefangenenaustausch', 'Russland'],
  'categories': ['Weltnachrichten']}]

Zusätzliche Funktionen von Cloudscraper

Wie Sie sehen können, kann Cloudscraper Ihnen helfen, den IUAM-Schutz von Cloudflare zu umgehen, aber Cloudscraper hat noch weitere Funktionen, die es wert sind, hervorgehoben zu werden.

Verwendung von Proxys

Proxys dienen als Zwischenserver zwischen Ihrem Computer und den Zielwebsites und ermöglichen Ihnen mehr Anonymität beim Surfen im Internet. Ihre Anfragen werden über sie weitergeleitet, sodass Zielwebsites, wie z. B. Cloudflare-geschützte Websites, den Proxy-Server als Quelle des Traffics sehen und nicht Ihr Gerät.

Mit Cloudscraper können Sie Proxys definieren und sie wie folgt an Ihr bereits erstelltes Cloudscraper-Objekt übergeben:

scraper = cloudscraper.create_scraper()

Proxy = {
    'http': 'http://your-proxy-ip:port',
    'https': 'https://your-proxy-ip:port'
}

response = scraper.get(URL, proxies=Proxy)

Hier definieren Sie ein Scraper-Objekt mit Standardwerten. Anschließend definieren Sie ein Proxy-Wörterbuch mit HTTP- und HTTPS-Proxys. Schließlich übergeben Sie das Proxy-Wörterbuchobjekt an die Methode scraper.get, wie Sie es bei einer regulären request.get- Methode tun würden.

Ändern des User-Agents und des JavaScript-Interpreters

Während Sie im vorherigen Skript einen User Agent direkt angegeben haben, kann die Cloudscraper-Bibliothek auch User Agents automatisch generieren. Dies reduziert die manuellen Konfigurationen, die während der Skripterstellung erforderlich sind, und ermöglicht es Ihnen, echte Benutzer mit unterschiedlichen Browser-Identitäten nachzuahmen. Dies geschieht nach dem Zufallsprinzip, aber Sie können auch die Art der User Agents auswählen, aus denen die Stichproben entnommen werden, indem Sie einen Browser-Parameter an die Methode cloudscraper.create_scraper übergeben. Dieser Browser-Parameter enthält ein Wörterbuch, in dem String-Werte für den Browser und die Plattform sowie boolesche Werte für Desktop und Mobile gespeichert sind.

Mit cloudscraper können Sie auch den JavaScript-Interpreter und die Engine festlegen, die Sie mit Ihrem Scraper verwenden. Der Standard ist ein nativer Solver, der vom cloudscraper-Team erstellt wurde. Weitere verfügbare Optionen sind Node.js, Js2Py, ChakraCore und v8eval.

Hier ist ein Beispiel-Snippet, das die Spezifikationen eines Interpreters und Browsers zeigt:

Scraper = cloudscraper.create_scraper(
    interpreter="nodejs",
    browser={
        "browser": "chrome",
        "platform": "ios",
        "desktop": False,
    }
)

Hier legen Sie den Interpreter als „nodejs“ fest und übergeben ein Wörterbuch an den Browser-Parameter. In diesem Wörterbuch wird der Browser auf Chrome und die Plattform auf „ios“ festgelegt. Der Desktop-Parameter ist auf False gesetzt, was bedeutet, dass der Browser auf Mobilgeräten ausgeführt wird, da die Werte für Mobilgeräte und Desktops standardmäßig auf True gesetzt sind. In diesem Fall wählt Cloudflare mobile iOS-Benutzeragenten aus, die auf dem Chrome-Browser ausgeführt werden.

Umgang mit CAPTCHAs

CAPTCHAsdienen dazu, Menschen und Bots voneinander zu unterscheiden, und können oft verhindern, dass Ihre Zielwebseite beim Web-Scraping geladen wird. Einer der Vorteile von Cloudscraper ist, dass es einige CAPTCHA-Löser von Drittanbietern unterstützt, die speziell für reCAPTCHA, hCaptcha und mehr entwickelt wurden. Wenn Sie an anderen CAPTCHA-Lösern von Drittanbietern interessiert sind, können Sie dem Cloudscraper-Team über GitHub-Support-Tickets Ihren Vorschlag unterbreiten.

Der folgende Ausschnitt zeigt Ihnen, wie Sie Ihren Scraper für die Verarbeitung von CAPTCHA anpassen können:

Scraper = cloudscraper.create_scraper(
  captcha={
    'provider': 'capsolver',
    'api_key': 'your_capsolver_api_key'
  }
)

In diesem Code geben Sie Capsolver als Ihren CAPTCHA-Anbieter und Ihren Capsolver-API-Schlüssel an. Beide Werte werden in einem Wörterbuch gespeichert und an den CAPTCHA-Parameter in der Methode cloudscraper.create_scraper übergeben.

Häufige Cloudscraper-Fehler

Obwohl Cloudscraper eine einfache Möglichkeit darstellt, Cloudflare-Einschränkungen zu umgehen, können bei der ersten Verwendung einige Fehler auftreten. Im Folgenden finden Sie einige der häufigsten Fehler (und Lösungen), die auftreten können.

Modul nicht gefunden

Der Fehler „Modul nicht gefunden” ist ein häufiger Fehler in Python, der auftritt, wenn Sie versuchen, eine Bibliothek zu importieren oder zu verwenden, die in Ihrer Python-Umgebung nicht vorhanden ist.

Wenn Sie in Python arbeiten, arbeiten Sie in einer Umgebung, und nur die in dieser aktiven Umgebung installierten Bibliotheken sind für Ihr Skript oder Notizbuch zugänglich. Der Fehler „Modul nicht gefunden“ bedeutet, dass Sie entweder die entsprechende (virtuelle) Umgebung nicht aktiviert oder das Paket nicht in Ihrer Umgebung installiert haben.

Um Ihre virtuelle Umgebung in Windows zu aktivieren, führen Sie den folgenden Befehl aus:

.<venv-name>Scriptsactivate.bat

Wenn Sie mit Linux oder macOS arbeiten, können Sie den folgenden Befehl verwenden:

source <venv-name>/bin/activate

Wenn das Paket überhaupt nicht installiert ist, installieren Sie es mit dem folgenden Befehl:

pip install cloudscraper

cloudscraper kann die neueste Cloudflare-Version nicht umgehen

Der Fehler „cloudscraper kann die neueste Cloudflare-Version nicht umgehen” tritt auf, wenn Sie versuchen, eine Version von cloudscraper zu verwenden, die dafür ausgelegt ist, eine ältere Version von Cloudflare zu umgehen. Dies ist ein Problem, da neuere Cloudflare-Versionen möglicherweise Änderungen enthalten, die ältere Versionen von cloudscraper einschränken, bis die Python-Bibliothek aktualisiert wird.

Wenn Sie eine ältere Version von Cloudscraper verwenden, sollten Sie Ihr Paket mit dem folgenden Befehl aktualisieren:

pip install -U cloudscraper

Wenn Sie bereits die neueste Version von Cloudscraper verwenden, müssen Sie möglicherweise auf ein Update warten oder eine alternative Lösung finden, die funktioniert.

Eine Alternative zu Cloudscraper

Wenn Sie nach der Umsetzung der hier vorgestellten Maßnahmen immer noch Probleme haben, den Schutz von Cloudflare zu umgehen, sollten Sie die Verwendung von Bright Data in Betracht ziehen.

Bright Data verfügt über eines der größten Proxy-Netzwerke, darunterDatencenter-, ISP-, Mobile -Proxys und Residential-Proxys. Mit diesen Proxys als Vermittler können Sie IP-Blockierungen umgehen, die Leistung steigern, geografische Beschränkungen umgehen und Ihre Privatsphäre schützen.

Um den Cloudflare-Schutz mit Bright Data zu umgehen, müssen Sie lediglich ein Konto erstellen, es konfigurieren und Ihre API-Anmeldedaten abrufen. Anschließend können Sie diese Anmeldedaten verwenden, um wie folgt auf die Daten Ihrer Ziel-URL zuzugreifen:

import requests

host = 'brd.superproxy.io'
port = 22225

username = 'brd-customer-<CUSTOMER_ID>-Zone-<ZONE_NAME>'
password = '<ZONENPASSWORT>'

proxy_url = f'http://{username}:{password}@{host}:{port}'

proxies = {
    'http': proxy_url,
    'https': proxy_url
}

response = requests.get(URL, proxies=proxies)

Hier erstellen Sie eine GET -Anfrage mit der Python Requests-Bibliothek und übergeben Proxys über den Parameter „proxies ”. Die erstellten Proxys verwenden Ihren Bright Data-Benutzernamen, Ihr Passwort, Ihren Host und Ihre Portnummer. Insbesondere Ihr Benutzername wird anhand Ihrer Bright Data-Kunden-ID und Ihres Zonennamens definiert – all diese Informationen können Sie Ihrem Konto entnehmen.

Fazit

In diesem Tutorial haben Sie gelernt, wie Sie die Cloudscraper-Bibliothek in Python verwenden, um Cloudflare-geschützte Websites zu scrapen. Außerdem haben Sie einige häufige Fehler kennengelernt, die auftreten können, und erfahren, wie Sie diese umgehen können. Cloudscraper kann zwar eine großartige Lösung sein, um das IUAM von Cloudflare zu umgehen, aber wie jede kostenlose Technologie hat auch diese ihre Grenzen. Deshalb haben Sie auch gelernt, wie Sie das beeindruckende Proxy-Netzwerkvon Bright Dataundden Web Unlockernutzen können, um auf Cloudflare-geschützte Websites zuzugreifen.

Bright Data bietet Ihnen automatisierte Tools, mit denen Sie ohne Einschränkungen auf Daten im Internet zugreifen können. Sie können auch das große Proxy-Netzwerk nutzen, um die Anzahl fehlgeschlagener Anfragen zu reduzieren, wenn Automatisierung nicht Ihr Ziel ist.

Sind Sie bereit, Ihr Web-Scraping auf die nächste Stufe zu heben? Entdecken Sie, wie unsere Premium-Proxys und professionellen Webdatenerfassungsdienste selbst die strengsten Bot-Schutzmaßnahmen mühelos umgehen können. Testen Sie noch heute gratis!