Google ist die Eingangstür zu den meisten öffentlichen Informationen im Web, und die Seite, die es für eine Anfrage zurückgibt, ist weit mehr als eine Liste blauer Links. Eine einzelne Suchergebnisseite kann organische Einträge, bezahlte Anzeigen, eine "People Also Ask"-Box, ein Knowledge Panel, ein lokales Paket mit einer Karte und eine Zeile verwandter Suchen enthalten, jedes davon ein eigener Block strukturierter Daten. Für alle, die Keyword-Recherche, Rank-Tracking, Wettbewerbsanalyse oder Marktanalyse betreiben, ist diese Seite einer der reichhaltigsten öffentlichen Datensätze im Internet.
Diese Anleitung ist die breite Grundlage dazu, wie man Google-Suchergebnisseiten scrapt: woraus eine SERP tatsächlich besteht, warum eine einfache HTTP-Anfrage blockiert wird, die realistischen Methoden zur Datenerfassung und ein lauffähiges Beispiel, das die Feature-Blöcke parst und paginiert. Wenn Sie stattdessen einen kompakten, kopierbaren Python-Walkthrough möchten, ist unser fokussiertes Tutorial darüber, wie man Google-Suchergebnisse mit Python scrapt, das passende Begleitstück. Alles hier bleibt auf öffentliche SERP-Daten beschränkt, die jeder ohne Konto einsehen kann, und der Abschnitt zur Rechtslage gegen Ende ist kein Standardtext, lesen Sie ihn also, bevor Sie etwas auf echtem Volumen ausrichten.
Was Sie erstellen werden
Am Ende haben Sie ein kleines Python-Skript, das eine öffentliche Google-Such-URL an eine SERP-fähige API sendet, geparstes JSON empfängt und jeden Feature-Block in saubere Datensätze einliest. Wir verwenden die Abfrage "data science" als durchgängiges Beispiel und ziehen diese Felder aus der Antwort:
- Suchergebnisse. Die organischen Einträge, jeder mit einem Titel, einer Ziel-URL, einem angezeigten Snippet und einer Position auf der Seite.
- Anzeigen. Die gesponserten Einträge, die über oder unter den organischen Ergebnissen erscheinen, wenn die Abfrage kommerziell ist.
- People Also Ask. Die aufklappbare Box mit verwandten Fragen, jeder Eintrag mit seiner Frage, einer kurzen Antwort und einem Quelllink.
- Verwandte Suchen. Die Zeile mit vorgeschlagenen Folgeabfragen, die Google am Seitenende anzeigt.
- Local Pack. Der kartengestützte Block nahegelegener Orte, wenn die Abfrage lokale Absicht hat.
- Ergebnisanzahl. Die gemeldete Gesamtzahl der Ergebnisse, die die Paginierung steuert.
Die Anatomie einer Google-Suchergebnisseite
Um eine SERP gut zu scrapen, brauchen Sie zunächst ein mentales Modell davon, wie sie zusammengesetzt ist. Google gibt keine einheitliche Liste zurück; es setzt die Seite aus mehreren verschiedenen Blöcken zusammen, und welche Blöcke erscheinen, hängt von der Absicht der Abfrage ab. Derselbe Parser muss jeden einzelnen erkennen. Hier sind die Teile, auf die es ankommt.
- Organische Ergebnisse. Die Kernliste der gerankten Webseiten. Jede trägt einen Titel, die Ziel-URL, ein Snippet und manchmal ein Datum oder Sitelinks. Dies ist der Block, um den sich die meiste SEO-Arbeit dreht, denn die Position hier ist das, was "Ranking" bedeutet.
- Anzeigen. Bezahlte Einträge mit der Kennzeichnung "Sponsored", die für kommerzielle Abfragen oben und unten auf der Seite erscheinen. Sie sehen ähnlich aus wie organische Ergebnisse, sind aber gekauft, daher behandelt die Wettbewerbsanalyse sie als separaten Datenstrom.
- People Also Ask (PAA). Eine aufklappbare Liste verwandter Fragen. Jede öffnet sich, um eine kurze Antwort aus einer Quellseite zu zeigen, plus einen Link zu dieser Quelle. PAA ist eine nützliche Karte der Fragen, die Suchende mit einem Thema verknüpfen.
- Knowledge Panel. Die Informationsbox rechts (Personen, Unternehmen, Orte, Dinge), die aus Googles Knowledge Graph aufgebaut wird. Sie hebt Schlüsselfakten, Bilder und verwandte Entitäten hervor, ohne dass der Nutzer durchklicken muss.
- Local Pack. Eine Karte plus eine kurze Liste nahegelegener Unternehmen, die erscheint, wenn die Abfrage lokale Absicht hat ("Cafés in meiner Nähe"). Sie trägt Namen, Bewertungen und Adressen und unterscheidet sich von vollständigen Google Maps-Ergebnissen.
- Verwandte Suchen. Eine Zeile mit vorgeschlagenen Abfragen am Fuß der Seite, nützlich für die Keyword-Erweiterung.
-
Paginierung. Die Steuerelemente, mit denen Sie tiefer in die Ergebnisse vordringen, gesteuert durch einen
start-Offset in der URL statt durch eine Seitenzahl.
Die praktische Erkenntnis ist, dass "Google scrapen" eigentlich bedeutet, eine Handvoll unabhängiger Blöcke zu scrapen, die sich zufällig eine Seite teilen. Ein guter Extraktor gibt jeden als eigene Liste zurück, damit Sie sie nachgelagert separat verwenden können. Wenn Sie speziell zur Fragebox eine tiefere Tour wünschen, lesen Sie, wie man Googles People Also Ask scrapt.
Warum eine einfache Anfrage bei Google scheitert
Wenn Sie aus einem Skript eine nackte HTTP-Anfrage an https://www.google.com/search?q=... abfeuern, erhalten Sie fast nie die Seite, die Sie in Ihrem eigenen Browser sehen. Google ist eines der am aggressivsten verteidigten Ziele im Web, aus zwei Gründen, die sich gegenseitig verstärken.
Erstens ist die Seite dynamisch. Ein Großteil einer modernen SERP, besonders die Feature-Blöcke, wird mit JavaScript zusammengesetzt, nachdem das initiale HTML eingetroffen ist. Ein rohes requests.get sieht ein Skelett, nicht das gerenderte Ergebnis, sodass die gewünschten Daten schlicht nicht in den empfangenen Bytes enthalten sind. Zweitens beobachtet Google scharf auf Automatisierung. Eine Anfrage, der echte Browser-Header fehlen, die von einer Rechenzentrums-IP kommt oder schneller eintrifft, als ein Mensch tippen könnte, bekommt ein Consent-Interstitial, ein CAPTCHA oder eine direkte Blockierung. Anhaltendes Scrapen von einer einzelnen Adresse bringt diese Adresse schnell ins Rate-Limit.
Ein funktionierender Google-Scraper braucht also zwei Dinge in einer einzigen Anfrage: eine IP, die die Plattform als gewöhnlichen Besucher liest, und, wo die Seite auf Skripte angewiesen ist, einen Browser, der sie rendert. Sie können das selbst mit einem Headless-Browser plus einem Pool rotierender residentieller Proxys zusammenbauen, aber diese Flotte gesund zu halten ist der größte Teil der Arbeit und der größte Teil der Kosten. Die Alternative ist eine verwaltete SERP-fähige API, die Rendering, IP-Rotation und CAPTCHA-Behandlung in einen einzigen Aufruf faltet und Ihnen fertige Daten übergibt. Den Kompromiss zwischen beiden behandeln wir als Nächstes.
Methoden zum Scrapen von Google: verwaltete API vs. Eigenbau
Es gibt zwei ehrliche Wege, dies in echtem Maßstab zu tun, und es lohnt sich, beide nüchtern zu betrachten.
Der Eigenbau-Stack. Sie betreiben einen Headless-Browser (Playwright oder Selenium), um die Seite zu rendern, leiten ihn durch einen Pool rotierender residentieller Proxys, damit keine einzelne IP ausbrennt, fügen Header- und Fingerprint-Management hinzu, damit der Traffic menschlich aussieht, und bauen Retry- und CAPTCHA-Solving-Logik für die Anfragen, die trotzdem herausgefordert werden. Das funktioniert, und für ein einmaliges akademisches Projekt kann es die richtige Wahl sein. Der Haken ist die Wartung: Proxys laufen ab, Fingerabdrücke werden veraltet, Google liefert Layout-Änderungen aus, und Ihr CAPTCHA-Solver will gefüttert werden. Der Scraper ist der einfache Teil; ihn unblockiert zu halten ist die eigentliche Aufgabe. Unsere Anleitungen zum Scrapen ohne blockiert zu werden und zum Umgehen von CAPTCHAs gehen tief auf diesen Stack ein.
Die verwaltete API. Sie senden eine URL an einen Endpunkt, der den residentiellen IP-Pool, die Rendering-Schicht und die CAPTCHA-Behandlung bereits besitzt, und er gibt entweder das fertige HTML zurück oder, besser, die in JSON geparste SERP. Sie überspringen die Infrastruktur vollständig und zahlen pro erfolgreicher Anfrage. Der Kompromiss ist, dass Sie von einem Anbieter und seinem Parser abhängig sind. Für die meiste produktive Rank-Tracking- und Recherchearbeit ist dies die pragmatische Wahl, denn die Zeit, die Sie mit dem Babysitten einer Proxy-Flotte verbringen würden, ist mehr wert als die Gebühr pro Anfrage. Das folgende Beispiel verwendet die Crawlbase Crawling API, die einen eingebauten Google-SERP-Parser hat.
Der Rest dieser Anleitung nimmt den Weg über die verwaltete API, weil er es uns erlaubt, echte geparste Ausgabe ohne 200 Zeilen Proxy-Plumbing zu zeigen. Die Parse-Konzepte (welcher Block welcher ist, wie die Felder abgebildet werden) übertragen sich unverändert auf den Eigenbau-Stack, falls Sie diesen Weg gehen.
Voraussetzungen
Sie brauchen ein paar Dinge, bevor Sie Code schreiben. Keines davon dauert lange.
Grundlegendes Python. Sie sollten sich damit wohlfühlen, ein Python-Skript zu schreiben und auszuführen sowie Pakete mit pip zu installieren. Wenn Sie die Parse-Seite für einen Eigenbau-Ansatz auffrischen möchten, behandelt unser Leitfaden zur Verwendung von BeautifulSoup in Python die Grundlagen.
Python 3.8 oder höher. Bestätigen Sie Ihre Version mit python --version. Falls Sie es nicht haben, installieren Sie es von python.org oder über eine Distribution wie Anaconda.
Ein Crawlbase-Konto und ein Token. Registrieren Sie sich, öffnen Sie Ihr Dashboard und kopieren Sie Ihr Anfrage-Token. Sie erhalten bis zu 20.000 kostenlose Anfragen ohne Kreditkarte, und Sie zahlen nur für erfolgreiche Anfragen. Behandeln Sie das Token wie ein Passwort: Es authentifiziert Ihre Anfragen, halten Sie es also aus der Versionskontrolle heraus.
Das Projekt einrichten
Erstellen Sie eine virtuelle Umgebung, damit die Projektabhängigkeiten isoliert bleiben, und installieren Sie dann den leichtgewichtigen Crawlbase Python-Wrapper, der Anfragen an die API sendet und die Antworten liest.
python --version python -m venv serp_env source serp_env/bin/activate pip install crawlbase
Unter Windows aktivieren Sie die Umgebung mit serp_env\Scripts\activate statt mit der source-Zeile. Das crawlbase-Paket ist ein kleiner, abhängigkeitsfreier Wrapper um die API: Sie initialisieren ihn mit Ihrem Token und rufen get mit einer URL auf. SQLite, das wir später zum Speichern der Ergebnisse verwenden, wird mit Python mitgeliefert, dafür ist also nichts zusätzlich zu installieren.
Schritt 1: Eine SERP über die Crawling API abrufen
Googles Suchseiten lassen sich gut über das Normal-Token der Crawling API bedienen, da der Parser das serverseitig gerenderte Markup liest. Initialisieren Sie den Client mit Ihrem Token, richten Sie ihn auf eine Such-URL aus und fordern Sie das JSON-Antwortformat an, damit Sie einen sauberen Umschlag statt rohem HTML erhalten.
from crawlbase import CrawlingAPI import json # Initialize the Crawling API with your Crawlbase token api = CrawlingAPI({"token": "YOUR_CRAWLBASE_TOKEN"}) # URL of the Google search page you want to scrape google_search_url = "https://www.google.com/search?q=data+science" # Ask the API for a JSON response envelope options = {"format": "json"} response = api.get(google_search_url, options) if response["headers"]["cb_status"] == "200": body = json.loads(response["body"].decode("latin1")) print(json.dumps(body, indent=4, sort_keys=True)) else: print("Failed to retrieve the page. Status:", response["status_code"])
Die API gibt einen JSON-Umschlag mit zwei Statusfeldern und einem Body zurück. cb_status (legacy pc_status) ist der Crawlbase-Status, und original_status ist das, was Google selbst zurückgegeben hat; das Absichern auf cb_status == "200" bedeutet, dass eine Blockierung oder ein Interstitial als Fehler auftaucht, statt nachgelagert Müll einzuspeisen. Der Body kommt als Bytes zurück, Sie dekodieren ihn also mit latin1, bevor Sie json.loads verwenden. Das Ausführen gibt den rohen Seiten-Umschlag aus, was bestätigt, dass der Abruf funktioniert, bevor Sie das Parsen hinzufügen.
Diese cb_status-Prüfung liest überhaupt nur deshalb 200, weil die Anfrage Google von vornherein als gewöhnlicher Besucher erreicht hat. Die Crawling API ruft die SERP von einer rotierenden residentiellen IP ab, rendert sie, wenn ein Feature-Block einen Browser braucht, und behandelt die CAPTCHAs, die eine rohe Anfrage sonst stoppen würden, sodass Sie sich das Betreiben einer Headless-Flotte und eines residentiellen Proxy-Pools selbst sparen. Richten Sie sie zuerst im kostenlosen Kontingent auf eine öffentliche Such-URL aus.
Schritt 2: Die SERP-Feature-Blöcke parsen
Das rohe HTML zu lesen und Selektoren für jeden Feature-Block von Hand zu schreiben ist möglich, aber Google liefert häufig Layout-Änderungen aus und die Klassennamen sind verschleiert, sodass handgeschriebene Selektoren ständig brechen. Die Crawling API bringt einen eingebauten google-serp-Scraper mit, der dieses Parsen für Sie übernimmt und jeden Block als saubere Liste zurückgibt. Sie schalten ihn mit einer Option ein.
from crawlbase import CrawlingAPI import json api = CrawlingAPI({"token": "YOUR_CRAWLBASE_TOKEN"}) google_search_url = "https://www.google.com/search?q=data+science" # The google-serp scraper parses the page into structured JSON options = {"scraper": "google-serp"} response = api.get(google_search_url, options) if response["headers"]["cb_status"] == "200": parsed = json.loads(response["body"].decode("latin1")) serp = parsed["body"] # Each feature block comes back as its own key organic = serp.get("searchResults", []) ads = serp.get("ads", []) paa = serp.get("peopleAlsoAsk", []) related = serp.get("relatedSearches", []) local = serp.get("snackPack", {}) total = serp.get("numberOfResults", 0) print(f"Organic results: {len(organic)}") print(f"Ads: {len(ads)}") print(f"People Also Ask: {len(paa)}") print(f"Related searches: {len(related)}") print(f"Total results reported: {total}") else: print("Failed to retrieve the page. Status:", response["status_code"])
Der google-serp-Scraper gibt ein body-Objekt zurück, dessen Schlüssel direkt auf die Feature-Blöcke aus dem Anatomie-Abschnitt abgebildet werden. searchResults ist die organische Liste, ads sind die gesponserten Einträge, peopleAlsoAsk die Fragebox, relatedSearches die Vorschlagszeile und snackPack das lokale Paket mit seinem Kartenlink und den Ortsergebnissen. numberOfResults ist die gemeldete Gesamtzahl, die Sie zum Steuern der Paginierung verwenden werden. Jeder Eintrag in searchResults trägt einen title, eine url, eine description und eine position, sodass die Datensätze ohne jegliche Selektorarbeit einsatzbereit sind.
Eine kommerzielle Abfrage bringt Anzeigen hervor; eine informationelle füllt die People Also Ask-Box; eine lokale Abfrage befüllt das Snack Pack. Lesen Sie jeden Schlüssel immer mit .get(key, default), damit ein fehlender Block eine leere Liste zurückgibt, statt einen KeyError auszulösen. Dieselbe Abfrage kann an verschiedenen Tagen auch verschiedene Blöcke zurückgeben, während Google sein Layout abstimmt.
Schritt 3: Das vollständige Skript zusammenbauen
Verdrahten Sie nun den Abruf und das Parsen zu einem lauffähigen Skript, das die organischen Ergebnisse und die Fragebox in flache Datensätze zieht und sie in JSON schreibt. Dies ist die Form, die Sie für eine echte Aufgabe erweitern würden.
from crawlbase import CrawlingAPI import json api = CrawlingAPI({"token": "YOUR_CRAWLBASE_TOKEN"}) options = {"scraper": "google-serp"} def fetch_serp(url): response = api.get(url, options) if response["headers"]["cb_status"] != "200": raise Exception(f"Unable to crawl '{url}'") parsed = json.loads(response["body"].decode("latin1")) return parsed["body"] def extract(serp): results = [] for item in serp.get("searchResults", []): results.append({ "position": item.get("position"), "title": item.get("title"), "url": item.get("url"), "description": item.get("description"), }) questions = [q.get("title") for q in serp.get("peopleAlsoAsk", [])] related = [r.get("title") for r in serp.get("relatedSearches", [])] return { "searchResults": results, "peopleAlsoAsk": questions, "relatedSearches": related, "numberOfResults": serp.get("numberOfResults", 0), } def main(): url = "https://www.google.com/search?q=data+science" serp = fetch_serp(url) data = extract(serp) with open("google_results.json", "w", encoding="utf-8") as f: json.dump(data, f, ensure_ascii=False, indent=2) print(f"Saved {len(data['searchResults'])} organic results") if __name__ == "__main__": main()
Führen Sie es mit python main.py aus. Die fetch_serp-Funktion holt die geparste SERP und löst bei jeder Nicht-200-Antwort eine Ausnahme aus, damit Fehler laut sind, und extract flacht die Blöcke, die Sie interessieren, in ein einzelnes Objekt ab. Tauschen Sie die Abfrage in der URL aus, und dieselben zwei Funktionen verarbeiten alles, was zurückkommt. Um jeder People Also Ask-Frage zu ihrer vollständigen Antwort und Quelle zu folgen, stehen die Felder description und destination pro Eintrag bereits in der Antwort, sodass Sie extract ohne eine weitere Anfrage erweitern können.
Wie die Ausgabe aussieht
Der google-serp-Scraper gibt ein strukturiertes Objekt zurück, das nach Feature-Block gegliedert ist. Hier ist ein gekürztes Beispiel dessen, was für die "data science"-Abfrage zurückkommt, damit Sie die Feldnamen kennen, bevor Sie Code dagegen schreiben.
{ "numberOfResults": 2520000000, "ads": [], "peopleAlsoAsk": [ { "position": 1, "title": "What exactly does a data scientist do?", "description": "A data scientist uses data to understand and explain the phenomena around them...", "destination": { "text": "Coursera", "url": "https://www.coursera.org/articles/what-is-a-data-scientist" } } ], "relatedSearches": [ { "title": "data science jobs", "url": "https://google.com/search?q=Data+science+jobs" } ], "searchResults": [ { "position": 1, "title": "What is Data Science?", "url": "https://www.ibm.com/topics/data-science", "description": "Data science combines math and statistics, specialized programming..." } ], "snackPack": { "mapLink": "", "results": [] } }
Jeder Block ist sein eigener Schlüssel, sodass Sie nur die organischen searchResults für das Rank-Tracking nehmen können, nur peopleAlsoAsk für die Content-Recherche oder nur ads für die Wettbewerbsanalyse. Da die Anzeigen- und lokalen Blöcke für eine informationelle Abfrage wie diese leer sind, sollte Ihr Code jeden Schlüssel immer mit Standardwert lesen, statt anzunehmen, dass er vorhanden ist.
Paginierung über die Ergebnisse
Eine Seite ist eine Demo; echte SERP-Arbeit geht tiefer. Google paginiert mit dem start-Query-Parameter, einem Offset in die Ergebnisliste statt einer Seitenzahl. Mit ungefähr neun bis zehn organischen Ergebnissen pro Seite gibt Ihnen start=10 die zweite Seite, start=20 die dritte und so weiter. Das Feld numberOfResults aus dem Parser ist Ihre Obergrenze, auch wenn Google in der Praxis selten mehr als ein paar hundert Ergebnisse für eine einzelne Abfrage liefert.
import time base = "https://www.google.com/search?q=data+science" all_results = [] for page in range(3): start = page * 10 url = f"{base}&start={start}" serp = fetch_serp(url) all_results.extend(extract(serp)["searchResults"]) time.sleep(2) # pace the crawl print(f"Collected {len(all_results)} results across 3 pages")
Bauen Sie jede Seiten-URL mit dem Offset, rufen Sie sie über die API ab und parsen Sie sie mit derselben Funktion. Die eine Gewohnheit, die einen langen Durchlauf gesund hält, ist die Dosierung: Ein kurzes sleep zwischen den Anfragen verteilt Ihren Traffic, statt ihn in einer engen Schleife abzufeuern. Um das Gesammelte zu persistieren, schreiben Sie den Titel, die URL, die Beschreibung und die Position jedes Datensatzes in eine Datenbank; SQLite ist die einfachste Option, da es mit Python mitgeliefert wird und keinen Server braucht. Von dort aus können Sie dieselben Zeilen auch als CSV für eine Tabellenkalkulation speichern oder in welches Analyse-Tool auch immer Sie verwenden laden.
Skalieren und unblockiert bleiben
Der Wechsel von einer Handvoll Abfragen zu Tausenden verändert das Problem von "die Seite parsen" zu "über die Zeit unblockiert bleiben". Ein paar Gewohnheiten machen einen lang laufenden Job belastbar.
- Dosieren und variieren. Verteilen Sie die Anfragen und rotieren Sie über viele Abfragen, statt einen Begriff mit voller Geschwindigkeit zu durchblättern. Stoßartiger, sich wiederholender Traffic ist der schnellste Weg, herausgefordert zu werden.
- Setzen Sie auf Rotation. Ein Pool residentieller IPs verteilt die Anfragen über viele echte Nutzeradressen, sodass keine einzelne ein Limit auslöst. Die Crawling API übernimmt das für Sie; wenn Sie Ihren eigenen Stack bauen, ist das der Teil, den Sie richtig machen müssen, und unser Leitfaden zum Rotieren von Proxys für Google-Suchergebnisse behandelt ihn ausführlich.
- Bei Fehlern kostenlos wiederholen. Crawlbase berechnet keine fehlgeschlagenen Anfragen, sodass eine blockierte oder nicht verfügbare URL Sie nichts kostet, um sie zu wiederholen. Bauen Sie einen kleinen Retry mit Backoff, statt Seiten fallen zu lassen.
- Auf Layout-Drift achten. Google liefert häufig SERP-Änderungen aus. Ein verwalteter Parser absorbiert die meisten davon für Sie, aber wenn ein Feld anfängt, leer zurückzukommen, hat sich das Layout wahrscheinlich verschoben, prüfen Sie also die Antwortform, bevor Sie annehmen, dass Ihr Code falsch ist.
Wenn Sie Ihren eigenen Traffic lieber durch einen rotierenden Pool leiten möchten, statt die verwaltete API zu nutzen, gibt Ihnen der Smart AI Proxy dieselbe residentielle IP-Rotation als Drop-in-Proxy-Endpunkt. Für Jobs, die über viele Abfragen gleichzeitig ausfächern müssen, erlaubt Ihnen ein asynchroner Crawler, URLs in die Warteschlange zu stellen und Ergebnisse zu sammeln, sobald sie fertig sind, statt nacheinander auf jede Anfrage zu warten. Und für das spezifische Problem von Consent- und Verifikationsseiten geht unser Walkthrough zum Umgehen von CAPTCHAs beim Scrapen von Google tiefer, als wir es hier können.
Ist es legal, Google-Suchergebnisse zu scrapen?
Ob das Scrapen von Google erlaubt ist, hängt von Googles Nutzungsbedingungen, Ihrer Gerichtsbarkeit und davon ab, was Sie mit den Daten tun. Das Scrapen öffentlicher Suchergebnisseiten, der Titel, Links, Snippets und Positionen, die jeder ohne Anmeldung sehen kann, ist die Art öffentlicher Daten, die Gerichte in mehreren Gerichtsbarkeiten als sammelbar behandelt haben. Dennoch schränken Googles Nutzungsbedingungen den automatisierten Zugriff auf seine Dienste ein, sodass Scraping gegen diese Bedingungen verstoßen kann, egal wie sorgfältig Ihr Tooling ist. Nichts vom Code hier ändert das; er bringt nur den technischen Teil zum Laufen. Lesen Sie Googles Bedingungen und seine robots.txt, und behandeln Sie beide als Grenze dafür, was Sie sammeln und wie schnell.
Ein paar Leitlinien, an denen es sich festzuhalten lohnt. Sammeln Sie nur öffentliche SERP-Daten und halten Sie sich fern von allem hinter einem Login, von personenbezogenen Daten über Einzelpersonen und von urheberrechtlich geschützten Medien, die Sie aus den verlinkten Zielen weiterverbreiten würden. Halten Sie Ihr Anfragevolumen bescheiden genug, dass Sie Googles Infrastruktur nicht belasten, und dosieren Sie Ihr Crawling, statt es mit Vollgas zu betreiben. Das Ziel sind strukturierte öffentliche Daten für Recherche, SEO und Marktanalyse, keine Massen-Neuveröffentlichung von Googles Index.
Wo eine offizielle API existiert, bevorzugen Sie diese. Google bietet sanktionierte Produkte für spezifische Bedürfnisse an: die Custom Search JSON API für die programmatische Suche über einen definierten Bereich und die Search Console für die Leistungsdaten Ihrer eigenen Website. Diese geben Ihnen strukturierten Zugriff innerhalb klarer Bedingungen. Sie decken nicht jeden Anwendungsfall ab, den ein SERP-Scraper abdeckt, weshalb das Scrapen öffentlicher Daten fortbesteht, aber wenn Ihr Projekt zu einem offiziellen Endpunkt passt, ist dieser Endpunkt der sauberere Weg. Wenn Sie die breiteren Abwägungen gegeneinander abwägen, lohnt sich unser Beitrag zu den Herausforderungen beim Scrapen von Google-Suchergebnissen.
Wichtigste Erkenntnisse
- Eine SERP besteht aus vielen Blöcken, nicht aus einer Liste. Organische Ergebnisse, Anzeigen, People Also Ask, das Knowledge Panel und das Local Pack sind unabhängige Blöcke; parsen Sie jeden einzeln.
- Einfache Anfragen werden blockiert. Google rendert die Feature-Blöcke mit JavaScript und fordert Rechenzentrums-Traffic heraus, daher brauchen Sie eine gerenderte Seite von einer vertrauenswürdigen residentiellen IP.
- Verwaltete API oder Eigenbau. Eine SERP-fähige API faltet Rendering, Rotation und CAPTCHA-Behandlung in einen Aufruf; der Eigenbau-Stack funktioniert, aber die Wartung ist die eigentlichen Kosten.
-
Mit dem Start-Offset paginieren. Erhöhen Sie
startin Zehnerschritten, um tiefer vorzudringen, verwenden SienumberOfResultsals Grenze und dosieren Sie die Anfragen mit einem Sleep. - Bei öffentlichen Daten bleiben. Respektieren Sie Googles ToS und robots.txt, vermeiden Sie Logins und personenbezogene Daten, halten Sie das Volumen bescheiden und bevorzugen Sie eine offizielle API, wo eine passt.
Häufig gestellte Fragen
Woraus besteht eine Google-SERP?
Eine Suchergebnisseite wird aus mehreren verschiedenen Blöcken zusammengesetzt: organische Ergebnisse (die gerankten Web-Einträge), Anzeigen (bezahlte Einträge bei kommerziellen Abfragen), People Also Ask (eine aufklappbare Fragebox), das Knowledge Panel (eine Entitätsbox aus Googles Knowledge Graph), das Local Pack (eine Karte plus nahegelegene Unternehmen) und verwandte Suchen. Welche Blöcke erscheinen, hängt von der Absicht der Abfrage ab, daher liest ein guter Scraper jeden Block unabhängig und toleriert die, die fehlen.
Warum scheitert eine einfache Anfrage bei Google?
Zwei Gründe verstärken sich. Ein Großteil einer modernen SERP, besonders die Feature-Blöcke, wird mit JavaScript gerendert, sodass eine rohe HTTP-Anfrage ein Skelett statt der fertigen Seite sieht. Google beobachtet außerdem scharf auf Automatisierung und fordert Traffic von Rechenzentrums-IPs oder Anfragen ohne echte Browser-Header mit einer Consent-Seite oder einem CAPTCHA heraus. Der Abruf über eine SERP-fähige API, die rotierende residentielle IPs und Rendering verwendet, lässt die Anfrage wie einen gewöhnlichen Besucher aussehen.
Sollte ich eine verwaltete API verwenden oder meinen eigenen Scraper bauen?
Für ein einmaliges Projekt kann der Eigenbau-Stack (ein Headless-Browser plus rotierende Proxys) in Ordnung sein. Für produktives Rank-Tracking oder Recherche im Maßstab ist eine verwaltete API in der Regel die pragmatische Wahl, denn die laufende Arbeit besteht darin, den Scraper unblockiert zu halten, nicht darin, ihn zu schreiben: Proxys laufen ab, Fingerabdrücke werden veraltet, und Google liefert Layout-Änderungen aus. Die Parse-Konzepte übertragen sich zwischen beiden, daher geht es bei der Wahl hauptsächlich darum, wer die Infrastruktur wartet.
Wie scrape ich Google-Suchergebnisse speziell mit Python?
Das Beispiel hier verwendet den Crawlbase Python-Wrapper mit dem google-serp-Scraper, um geparstes JSON ohne das Schreiben von Selektoren zu erhalten. Für einen kompakten, durchgängigen Python-Walkthrough, der die Anfrage und das Parsen Schritt für Schritt aufbaut, lesen Sie unser fokussiertes Tutorial darüber, wie man Google-Suchergebnisse mit Python scrapt, das das Begleitstück zu dieser breiteren Grundlage ist.
Wie paginiere ich durch mehr Google-Ergebnisse?
Verwenden Sie den start-Query-Parameter, einen Offset in die Ergebnisse statt einer Seitenzahl. Mit ungefähr zehn organischen Ergebnissen pro Seite ist start=10 die zweite Seite, start=20 die dritte und so weiter. Bauen Sie jede URL mit dem Offset, rufen Sie sie über die API ab, parsen Sie mit derselben Funktion und pausieren Sie ein paar Sekunden zwischen den Anfragen, damit Sie das Crawling dosieren, statt es zu malträtieren.
Ist das Scrapen von Google-Suchergebnissen legal?
Öffentliche SERP-Daten, die Titel, Links, Snippets und Positionen, die jeder ohne Konto sehen kann, werden im Allgemeinen als sammelbar behandelt, aber Googles Nutzungsbedingungen schränken den automatisierten Zugriff ein, sodass Scraping mit diesen Bedingungen in Konflikt geraten kann. Lesen Sie Googles Bedingungen und robots.txt, vermeiden Sie Logins und personenbezogene Daten, halten Sie das Volumen bescheiden und bevorzugen Sie einen offiziellen Endpunkt wie die Custom Search JSON API oder Search Console, wo er zu Ihrem Anwendungsfall passt.
Crawlen Sie jede Website im großen Maßstab, ohne gegen die Infrastruktur zu kämpfen.
Crawlbase übernimmt Proxys, Fingerprints und CAPTCHAs, damit Ihr Team Datenpipelines ausliefert, statt Crawl-Infrastruktur zu pflegen. 1.000 Anfragen kostenlos, keine Karte erforderlich.
