Web Scraping mit Ajax: Kompletter Leitfaden

Autor :

Reagieren :

Kommentieren

Eine Website scrapen, die AJAX ist komplexer als herkömmliches Web-Scraping. Der Inhalt befindet sich nicht in der HTML initial: Es kommt erst im Nachhinein, über JavaScript. Ein einfacher Scraper erkennt diese Daten also nicht, und es muss ein geeigneter Ansatz gewählt werden, um diese dynamischen Daten zu extrahieren.

So funktioniert Web-Scraping auf einer Website, die AJAX nutzt, um ihre Daten in JavaScript zu laden
So funktioniert Web-Scraping auf einer Website, die AJAX nutzt. ©Christina für Alucare.fr

AJAX und Web-Scraping: Warum ist das etwas anderes?

das Web Scraping besteht darin, den Code zu analysieren HTML einer Webseite, um die relevanten Daten automatisch zu extrahieren. Bei einer statischen Website funktioniert das sehr gut. Probleme treten jedoch auf, wenn AJAX (für Asynchronous JavaScript and XML), eine Technologie, mit der Inhalte geladen oder aktualisiert werden können ohne die gesamte Seite neu zu laden.

Wie funktioniert AJAX?

Der Browser (oder Browser) sendet kleine asynchrone Anfragen an den Server im Hintergrund. Der Server sendet die Daten zurück, häufig im Format JSON. Die Seite zeigt diese Informationen dann sofort an, ohne den Rest neu zu laden. Das macht das Web schneller und interaktiver.

Schematische Darstellung der Funktionsweise von AJAX, das Daten im Hintergrund lädt, ohne die gesamte Webseite neu zu laden
So funktioniert Web-Scraping auf einer Website, die AJAX nutzt. ©Christina für Alucare.fr

Warum ist AJAX-Scraping komplexer?

Wenn eine Website AJAX, der geladene Inhalt wird nicht im ursprünglicher HTML-Quellcode. Er wird nachträglich vom JavaScript, sobald die Seite geöffnet ist. Ein herkömmlicher Scraper extrahiert nur den statischer Inhalt : Er sieht also die dynamische Daten die anschließend hinzugefügt wurden.

Um sie abzurufen, benötigst du ein Tool, das JavaScript ausführen kann. In der Praxis gibt es drei vorherrschende Ansätze:

  • Die folgenden direkt wiedergeben AJAX-Anfragen, d. h. die Anrufe XHR die die Daten laden.
  • Ein headless browser wie Selenium Wo Playwright, das für die Wiedergabe sorgt (oder Rendering) der Seite wie in einem echten Browser.
  • Über eine Scraping-API All-in-One.

Was sind die Methoden und Werkzeuge für AJAX-Scraping?

Methode 1: AJAX-Anfragen nachbilden

Das ist die effektivste Methode, um dynamische Daten abrufen. Anstatt die gesamte Seite zu laden, solltest du AJAX-Anfragen abfangen an den Server gesendet, und dann gibst du sie direkt wieder ein, um die Rohdaten zu erhalten, oft im Format JSON.

Um diese Aufrufe zu finden, öffne die Entwicklertools deines Browsers und anschließend den Reiter Netzwerk mit dem Filter XHR. Dort findest du die genaue URL des Endpunkts, die Kopfzeilen und das Format der Antwort.

Die Vorteile dieser Technik:

  • Sehr schnell und leicht, da hierfür kein vollständiges Rendern der Seite erforderlich ist.
  • Sie umgeht die Probleme im Zusammenhang mit der JavaScript-Wiedergabe.

Seine Grenzen:

  • Mehr aufwändig in der Umsetzung als ein Headless-Browser.
  • Sie fordert eine sorgfältige Analyse Anfragen, Header und Parameter. Manche Websites verlangen ein Token oder bestimmte obligatorische Header.

Was die Bibliotheken angeht, hast du je nach Sprache die Wahl:

Die Bibliotheken „requests“ (Python) und „axios“ (JavaScript) zur Nachbildung von AJAX-Anfragen
Python und JavaScript bieten zwei Bibliotheken zur Umsetzung von AJAX-Anfragen: „requests“ und „axios“. ©Christina für Alucare.fr

Methode 2: Verwendung eines Headless-Browsers

Das ist die einfachste Methode, um Dynamische Seiten scrapen. Du automatisierst einen echten Webbrowser ohne grafische Benutzeroberfläche. Er stellt die Seite genau so dar, wie es ein Benutzer tun würde, führt den JavaScript, löst die AJAX-Aufrufe aus und zeigt den endgültigen Inhalt an.

Vorteile :

  • Du kratzt genau was der Benutzer sieht, einschließlich der geladenen Inhalte.
  • Das ist einfach umzusetzen, selbst auf einer sehr dynamischen Website.

Die Unannehmlichkeiten:

  • Das ist langsamer als eine direkte Anfrage.
  • Das ist ressourcenintensiv, da du einen vollwertigen Browser startest.

Die am häufigsten verwendeten Werkzeuge für diesen Ansatz:

  • Selenium : das vielseitige, traditionsreiche und gut dokumentierte Werkzeug.
  • Playwright : modern, schnell und browserübergreifend.
  • Puppeteer : spezialisiert auf Chrome und Chromium.

Vergleich der Headless-Browser Puppeteer, Playwright und Selenium zum Scrapen von AJAX-Seiten
Puppeteer, Playwright und Selenium automatisieren einen Headless-Browser, um dynamische Seiten zu scrapen. ©Christina für Alucare.fr

Du kannst einen Headless-Browser mit BeautifulSoup (Modul bs4): Der Browser lädt die Seite und sorgt für die Rendering JavaScript, und dann parses der mit der Bibliothek gerenderte HTML-Code.

Methode 3: All-in-One-Scraping-APIs

Einige Plattformen bieten Umfassende Scraping-Dienstleistungenunter den kostenlose Tools oder kostenpflichtige Angebote auf dem Markt. Zu nennen sind beispielsweise Bright Data, ZenRows, ScrapingBee Wo Crawlbase. Sie verwalten automatisch die JavaScript-Rendering, Sie Proxies und dieDatenextraktion : Du sendest eine URL, und sie senden dir den fertigen Inhalt zurück.

Vorteile :

  • Einfach und zuverlässig, selbst in großem Maßstab.
  • Du musst dich weder um die Infrastruktur noch um Proxys kümmern.

Die Unannehmlichkeiten:

  • das Die Kosten können hoch sein je nach Menge.
  • Du hast weniger Kontrolle über den Prozess.

Bright Data-Schnittstelle, eine All-in-One-Scraping-API für AJAX-Websites
Bright Data ist eine All-in-One-Scraping-API, die JavaScript-Rendering und Proxys verwaltet. ©Christina für Alucare.fr

Wie kann man eine Website mit AJAX scrapen?

So funktioniert das Scraping einer Website, die ihre Artikel über AJAX, mit zwei Code-Beispielen in Python : eines mit requests, eines mit einem headless browser.

1. AJAX-Anfragen in den Entwicklertools identifizieren

Der per AJAX geladene Inhalt befindet sich nicht im Ursprünglicher HTML-Code. Man muss also den Netzwerkaufruf identifizieren, der die Daten abruft.

  • Öffne die Entwicklungswerkzeuge deines Browsers (Taste F12 oder Rechtsklick und dann “Untersuchen”).
  • Wechsle zur Registerkarte Netzwerk (Network) und lädt die Seite anschließend neu.
  • Beobachte die von der Website ausgelöste Anfragen, einschließlich derjenigen, die die Artikel verladen.
  • Filter nach Abfragen vom Typ XHR Wo fetch : Diese sind es, die die Daten im Hintergrund abrufen.

Klicke auf die richtige Abfrage, um deren URL, sein Kopfzeilen und die Antwort darauf. Meistens liegt die Antwort im Format JSON, manchmal im HTML-Format.

2. Die Scraping-Methode auswählen

Sobald du die AJAX-Anfrage identifiziert hast, hast du zwei Möglichkeiten.

  • Die Abfrage wiederholen : Du spielst den Anruf direkt in Python mit der Bibliothek ab requests. Du rufst die Rohdaten ab in JSON oder als HTML-Datei, ohne Browser. Das ist die schnellste Methode.
  • Headless-Browser : Wenn die Website die Ausführung von JavaScript oder komplexe Interaktionen (Klicken, Scrollen) erfordert, verwendest du Selenium Wo Playwright. Das Tool lädt die Seite so, wie es ein echter Nutzer tun würde.

3. Den AJAX-Aufruf mit „requests“ nachbilden

Hier ist der Basiscode, um den im Reiter „Netzwerk“ identifizierten Anruf erneut abzuspielen.

Anfragen importieren

# URL der AJAX-Anfrage, die in den Entwicklertools identifiziert wurde
url = 'https://example.com/ajax-endpoint'

# Parameter der Anfrage (an die beobachteten Daten anzupassen)
params = {
    'page': 1,
    'category': 'technology'
}

# Aus dem Reiter 'Netzwerk' zu kopierende Header (User-Agent, Referer, Token...)
headers = {
    'User-Agent': 'Mozilla/5.0',
    'X-Requested-With': "XMLHttpRequest"
}

# Senden der GET-Anfrage
response = requests.get(url, params=params, headers=headers)

# Status der Antwort überprüfen
if response.status_code == 200:
    data = response.json()
    print(data)
else:
    print(f"Fehler {response.status_code}")

Zeile für Zeile im Detail:

  • import requests : Lädt die Bibliothek, die die HTTP-Anfragen sendet.
  • url : Ersetze diese Adresse durch den AJAX-Endpunkt, der in der Registerkarte „Netzwerk“.
  • headers : Kopiert die im Reiter „Netzwerk“ angezeigten Kopfzeilen. Manche Websites verlangen eine User-Agent, a Referer oder ein Token CSRF um dem Antrag stattzugeben.
  • EIN Status 200 bedeutet, dass die Anfrage erfolgreich war.
  • response.json() wandelt die JSON-Antwort in ein Python-Wörterbuch um.
  • print(data) : Zeigt die extrahierten Daten an (Artikelübersicht, Preise usw.).
  • else : Zeigt den Fehlercode an, wenn der Aufruf fehlschlägt (zum Beispiel 403 Wo 404).

4. Webscraping mit einem Headless-Browser (Selenium + BeautifulSoup)

Wenn die Nachbildung der Abfrage nicht ausreicht, ein Browser ohne Kopf führt das JavaScript für dich aus. Anschließend rufst du den gerenderten HTML-Code ab und dann parses mit BeautifulSoup (Modul bs4).

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup
import time

# Chrome im Headless-Modus (ohne Benutzeroberfläche) starten
options = Options()
options.add_argument("--headless")
driver = webdriver.Chrome(options=options)

# Die Seite öffnen, deren Inhalt über AJAX geladen wird
driver.get("https://example.com")

# Das JavaScript die Daten laden lassen
time.sleep(3)

# Das gerenderte HTML mit BeautifulSoup parsen
soup = BeautifulSoup(driver.page_source, "html.parser")
articles = soup.find_all("div", class_="article")

for article in articles:
    print(article.get_text())

driver.quit()

Hier, Selenium ein echter Pilot Chrome das für die Rendering auf der Seite und driver.page_source gibt den HTML-Code zurück, sobald der AJAX-Inhalt geladen ist. Playwright und Puppeteer funktionieren nach dem gleichen Prinzip, weisen jedoch eine unterschiedliche Syntax auf.

5. Die Daten aus dem JSON oder dem gerenderten HTML extrahieren

Sobald du die Antwort erhalten hast, filterst du die relevanten Informationen entsprechend ihrem Format heraus.

  • Antwort im JSON-Format : verwendet response.json() um ein Python-Wörterbuch zu erstellen und anschließend über die Schlüssel auf die Werte zuzugreifen.
  • Antwort im HTML-Format : führt über BeautifulSoup (Modul bs4) mit find Wo select um Elemente anhand ihrer Klasse oder ihrer ID anzusprechen.

Welche AJAX-Scraping-Methode soll man wählen?

Jeder Ansatz hat je nach deinem Niveau und deinem Vorhaben seine Stärken. Hier ist ein kurzer Vergleich.

Methode Geschwindigkeit Komplexität Kosten Am besten geeignet für…
Reproduktion der Anfrage Sehr schnell Hoch Schwach Scraping in großem Umfang, strukturierte Daten
Headless-Browser Langsam Bedeuten Schwach Komplexe Websites, schnelle Projekte, Einsteiger
Scraping-API Schnell Sehr gering Hoch Kritische Projekte ohne Infrastrukturwartung

In der Praxis: Beginne mit der Wiederholung einer Anfrage wenn der AJAX-Endpunkt sauberes JSON zurückgibt. Wechsle zu headless browser sobald JavaScript unverzichtbar wird.

Was sind die Herausforderungen beim AJAX-Scraping und wie lassen sie sich lösen?

Eine Website scrapen in AJAX wirft Probleme auf, die beim herkömmlichen Scraping nicht auftreten. Hier sind die wichtigsten Herausforderungen und vor allem, wie man sie umgehen kann.

Herausforderung 1: Inhalte, die auf den ersten Blick nicht sichtbar sind

Wenn du eine AJAX-Seite lädst, wird die Der ursprüngliche HTML-Code ist oft leer : Die Daten werden erst nach der Ausführung des JavaScript-Codes übermittelt. Die Lösung besteht darin, einen Headless-Browser zu verwenden, wie zum Beispiel Selenium, Playwright Wo Puppeteer, der für die Rendering die gesamte Seite, bevor man ihren Inhalt liest.

Herausforderung 2: Einfache Abfragen, die fehlschlagen

Es reicht nicht immer aus, den AJAX-Aufruf zu wiederholen. Viele Websites schützen ihre API, und deine Abfrage kann eine Fehler 403 während der Browser die Antwort hingegen sehr wohl erhält. In deiner Anfrage fehlen Informationen. In der Praxis ist oft Folgendes erforderlich:

  • Kopieren Sie die headers obligatorisch die auf der Registerkarte „Netzwerk“ angezeigt werden (wie User-Agent Wo Referer).
  • Hinzufügen des Token CSRF oder Sitzungs-Cookies, wenn der Server diese verlangt.
  • Überprüfen Sie den Statuscode der Antwort, um schnell herauszufinden, wo das Problem liegt.

Herausforderung 3: Die Steuerung der Ladezeiten

Die per AJAX geladenen Daten können langsam erscheinen. Wenn der Scraper die Seite zu früh ausliest, findet er nichts. Je nach Bedarf gibt es zwei Ansätze:

  • A feste Pause (ein sleep (in Sekunden), bevor die Seite geladen wird. Einfach, aber unzuverlässig.
  • A bedingte Wartezeit, viel sauberer, über die wartet von Selenium : das’stillschweigende Erwartung wartet automatisch, bis die Elemente verfügbar sind, während die’ausdrückliche Erwartung wartet genau auf ein bestimmtes Element oder eine bestimmte Bedingung, bevor es fortfährt.

Herausforderung 4: Scraping in großem Umfang, ohne blockiert zu werden

Bei ein paar Seiten ist das kein Problem. Aber wenn du Tausende von Seiten, wird die Website dich schließlich erkennen und sperren. Um langfristig erfolgreich zu bleiben:

  • Mach deine Anfragen über Proxys leiten um die IP-Adressen zu variieren.
  • Beachte eine Zeitabstand zwischen den Anrufen anstatt alles auf einmal zu verschicken.
  • Verwaltet die Seitenumbruch und die Unendliches Scrollen Schritt für Schritt, wie ein echter Besucher.

Das Wichtigste ist, unauffällig zu bleiben. Je mehr sich dein Verhalten dem eines Menschen ähnelt, desto geringer ist die Gefahr, dass du abgeschaltet wirst.

Häufig gestellte Fragen

Kannst du mit BeautifulSoup eine Website mit AJAX auslesen?

Nicht direkt. BeautifulSoup ist eine Bibliothek für statische Analyse : Sie liest ausschließlich das ursprünglich geladene HTML. Da AJAX den Inhalt über JavaScript einfügt, musst du sie durch ein Tool ergänzen, das dieses JavaScript ausführen kann, wie zum Beispiel Selenium Wo Playwright. Der Headless-Browser ruft den gerenderten HTML-Code ab, und anschließend übergibst du diesen Inhalt an BeautifulSoup für den Parsing.

Eine weitere Möglichkeit: die AJAX-Anfragen und die JSON-Antwort abrufen, die oft einfacher zu verarbeiten ist als HTML.

Wie geht man mit Authentifizierungsfehlern oder Sitzungsköpfen auf einer AJAX-Website um?

Eine geschützte Website kann einen Fehler zurückgeben 401 (nicht zulässig) oder 403 (verboten), wenn deine Abfragen nicht die richtigen Daten enthalten Kekse oder HTTP-Header. Die Lösung: diese Informationen abfangen während der ersten Navigation und verwende sie anschließend in deinen simulierten AJAX-Anfragen wieder. Viele Websites verlangen außerdem ein CSRF-Token oder eine Kopfzeile X-Requested-With, ohne den der Server die Anfrage ablehnt. Genau aus diesem Grund reicht eine einfache Anfrage requests versagt dort, wo der Browser vorbeikommt.

Wie kann man eine Website mit Infinite Scroll oder einer “Mehr laden”-Schaltfläche scrapen?

Das „Infinite Loading“ ist eine Form des AJAX-Ladens. Um dies zu automatisieren, hast du zwei Möglichkeiten:

  • AJAX-Anfrage identifizieren die den zusätzlichen Inhalt lädt und diesen dann direkt anzeigt (oft eine URL mit einem Paginierungsparameter).
  • Oder Klicks auf die Schaltfläche “Mehr laden” simulieren” über einen Headless-Browser wie Selenium Wo Puppeteer, bis alle Daten wiederhergestellt sind.

Gibt es Chrome-Erweiterungen für AJAX-Scraping?

Ja. Mehrere Chrome-Erweiterungen erleichtern das AJAX-Scraping für einfache Anforderungen, ohne dass man eine einzige Zeile Code schreiben muss. Die bekanntesten sind:

  • Web Scraper
  • Data Miner
  • Instant Data Scraper

Chrome-Erweiterung „Instant Data Scraper“, die die aus einer Webseite mit AJAX extrahierten Daten anzeigt.
Instant Data Scraper, eine Chrome-Erweiterung zum Erfassen von Daten aus Webseiten ohne Programmierkenntnisse. ©Christina für Alucare.fr

Was ist der Unterschied zwischen einem expliziten und einem impliziten “wait” bei Selenium oder Playwright?

  • EIN implizite Wartezeit ist eine globale Wartezeit, die auf alle Elemente angewendet wird. Dein Skript wartet eine bestimmte Zeit ab, bevor es einen Fehler auslöst, falls ein Element nicht erscheint.
  • EIN explizites Warten ist eine bedingte Warteschleife, die auf ein bestimmtes Element ausgerichtet ist. Sie wartet nur so lange, bis eine Bedingung erfüllt ist.

In der Praxis ist der explizites Warten ist vorzuziehen: So lassen sich unnötige Verzögerungen vermeiden und Fehler reduzieren, wenn das Laden der AJAX-Inhalte lange dauert.

Kurz gesagt: Das Scrapen mit AJAX erfordert etwas mehr Geschick, aber mit den richtigen Methoden entgeht dir nichts. Und du? Welche Methode verwendest du, um AJAX-Websites zu scrapen? Teile deine Tipps in den Kommentaren mit.

👍Deine Meinung
Der Artikel ist informativ
Der Artikel ist objektiv
Der Artikel beantwortet meine Frage
Der Inhalt ist auf dem neuesten Stand
🔍 Haben Sie Fehler gefunden? Sagen Sie uns, wo!

Gefällt es Ihnen? Teilen Sie es!

Dieser Inhalt ist ursprünglich auf Französisch (Siehe den Redakteur oder die Redakteurin direkt unten.). Er wurde mit Deepl und/oder der Google-Übersetzungs-API in verschiedene Sprachen übersetzt und anschließend Korrektur gelesen, um in möglichst vielen Ländern Hilfe anbieten zu können. Diese Übersetzung kostet uns mehrere Tausend Euro pro Monat. Wenn sie zu 100 % nicht perfekt ist, hinterlassen Sie uns bitte einen Kommentar, damit wir sie korrigieren können. Wenn Sie daran interessiert sind, übersetzte Artikel zu lektorieren und ihre Qualität zu verbessern, schicken Sie uns bitte eine E-Mail über das Kontaktformular!
Wir freuen uns über Ihr Feedback, um unsere Inhalte zu verbessern. Wenn Sie Verbesserungsvorschläge machen möchten, nutzen Sie bitte unser Kontaktformular oder hinterlassen Sie unten einen Kommentar. Ihr Feedback hilft uns immer, die Qualität unserer Website zu verbessern Alucare.fr


Alucare ist ein unabhängiges Medium. Unterstützen Sie uns, indem Sie uns zu Ihren Google News-Favoriten hinzufügen:

Veröffentlichen Sie einen Kommentar im Diskussionsforum