Googles Suchergebnisse sind die Rangliste für SEO. Wo eine Seite für ein Keyword platziert ist, welche Titel und Snippets den Klick gewinnen, welche Fragen im "Menschen fragen auch"-Kasten erscheinen und welche verwandten Suchanfragen Google vorschlägt: Jedes davon ist ein öffentliches Signal, das Sie direkt von der Ergebnisseite ablesen können. Quer über Ihre Ziel-Keywords gezogen, zeigen sie Ihnen, mit wem Sie konkurrieren, wo Sie heute stehen und welche Themen Sie noch nicht abgedeckt haben.

Dieser Leitfaden zeigt Ihnen, wie Sie SEO-Daten aus Google extrahieren und analysieren mit Python. Sie erstellen einen kleinen, lauffähigen Workflow, der eine gerenderte SERP über die Crawling API abruft, die für SEO relevanten Felder parst, dieselbe Abfrage für eine Liste von Keywords ausführt und das Ergebnis in pandas lädt, um Rankingpositionen, Wettbewerberüberschneidungen und Content-Lücken zu finden. Der gesamte Walkthrough beschränkt sich auf öffentliche Suchergebnis-Daten, und der Abschnitt zur Rechtslage gegen Ende ist kein Boilerplate, lesen Sie ihn daher, bevor Sie dies auf ein echtes Volumen anwenden.

Was Sie erstellen werden

Ein Python-Workflow, der eine Liste von Ziel-Keywords entgegennimmt, das HTML jeder SERP über die Crawling API abruft und einen strukturierten Datensatz für jedes organische Ergebnis sowie die SEO-Features der Seite extrahiert. Wir ziehen diese Felder aus jeder Suche heraus:

  • Position der organische Rang jedes Ergebnisses, gezählt vom oberen Seitenrand.
  • Titel der angezeigte Meta-Titel jedes Ergebnisses, der die Click-Through-Rate beeinflusst.
  • Link die Ziel-URL, aus der wir auch die Domain für die Wettbewerberanalyse ableiten.
  • Snippet die Meta-Beschreibung, die Google unter jedem Ergebnis anzeigt.
  • Menschen fragen auch die PAA-Fragen, die Google der Abfrage anhängt, nützlich für Content-Ideen.
  • Verwandte Suchanfragen die verwandten Abfragevorschläge am Ende der Seite, eine Quelle für Long-Tail-Keywords.

Diese Felder decken die SEO-Datenpunkte ab, die es wert sind, von einer SERP zu verfolgen: organische Rankings, SERP-Features wie PAA, Meta-Titel und Beschreibungen sowie die URLs und Domains der Seiten, die Sie übertreffen. Suchvolumen und CPC stehen nicht auf der Seite selbst, daher kommen diese weiterhin von einem Keyword-Tool wie Google Keyword Planner, Ahrefs oder SEMrush; dieser Workflow liefert Ihnen alles, was die Ergebnisseite enthält.

Warum eine einfache Anfrage bei Google scheitert

Wenn Sie eine rohe HTTP-Anfrage an eine Google-Such-URL von einem Skript aus senden, erhalten Sie selten die saubere SERP, die Sie in Ihrem eigenen Browser sehen. Google verwendet starke Anti-Scraping-Maßnahmen. Anfragen, die nicht wie ein echter Browser aussehen, werden mit einem CAPTCHA herausgefordert, auf eine "Entschuldigung"-Zwischenseite umgeleitet oder nach einer Handvoll Aufrufen ratenbeschränkt. Eine Datacenter-IP, die schnelle, identische Anfragen stellt, ist der deutlichste mögliche Hinweis, und Google blockiert sie schnell.

Darüber hinaus wird ein Großteil einer modernen SERP mit JavaScript zusammengestellt. Features wie der PAA-Kasten werden erst nach dem Laden des anfänglichen HTMLs befüllt, sodass selbst eine Anfrage, die durchkommt, ohne die gesuchten Daten zurückgegeben werden kann. Ein funktionierender Google-SEO-Scraper benötigt daher zwei Dinge in einer Anfrage: eine IP, die die Plattform als echten Besucher liest, und einen Browser, der die Seite rendert. Sie können das selbst mit einem Headless-Browser plus rotierenden Residential-Proxys aufbauen, aber diesen Stack gesund zu halten ist die größte Aufgabe. Die Crawling API kombiniert beides in einem einzigen Aufruf: Sie senden die URL, sie ruft von einer vertrauenswürdigen IP ab und rendert bei Bedarf, und gibt fertiges HTML zurück, das Sie parsen können.

Warum Rotation hier wichtig ist

Googles Abwehrmechanismen basieren stark auf Anfragepmustern und IP-Reputation. Eine einzelne Datacenter-Adresse, die durch Keywords blättert, löst schnell ein Limit aus. Die Crawling API rotiert Anfragen über viele echte Nutzerapressen serverseitig und löst die CAPTCHAs, die Google wirft, sodass Sie diesen Pool nicht selbst beschaffen und pflegen müssen. Sie können mit bis zu 20.000 kostenlosen Anfragen beginnen, keine Kreditkarte erforderlich.

Voraussetzungen

Sie benötigen einige Dinge, bevor Sie Code schreiben können. Keines davon dauert lange.

Grundlegendes Python. Sie sollten in der Lage sein, ein Python-Skript zu schreiben, auszuführen und Pakete mit pip zu installieren. Wenn BeautifulSoup neu für Sie ist, deckt unser Leitfaden zur Verwendung von BeautifulSoup in Python die Parse-Grundlagen ab, die dieses Tutorial voraussetzt, und unser Leitfaden zur Datenanalyse mit pandas deckt die DataFrame-Seite ab.

Python 3.8 oder höher. Überprüfen Sie Ihre Version mit python --version. Wenn Sie es nicht haben, installieren Sie es von python.org oder über eine Distribution wie Anaconda.

Ein Crawlbase-Konto und Token. Registrieren Sie sich, öffnen Sie Ihr Dashboard und kopieren Sie Ihren Anfrage-Token von der Kontodokumentationsseite. Sie erhalten bis zu 20.000 kostenlose Anfragen, und Sie zahlen nur für erfolgreiche Anfragen. Behandeln Sie den Token wie ein Passwort: Er authentifiziert Ihre Anfragen, halten Sie ihn also aus der Versionskontrolle heraus.

Projekt einrichten

Erstellen Sie eine virtuelle Umgebung, damit Projektabhängigkeiten isoliert bleiben, und installieren Sie dann die drei Bibliotheken, die der Workflow benötigt.

bash
python --version

python -m venv seo_env
source seo_env/bin/activate

pip install requests beautifulsoup4 pandas

Aktivieren Sie unter Windows die Umgebung mit seo_env\Scripts\activate anstelle der source-Zeile. Drei Abhängigkeiten erledigen die Arbeit: requests sendet den HTTP-Aufruf an die Crawling API, beautifulsoup4 parst das zurückgegebene HTML, sodass Sie einzelne Felder per CSS-Selektor herausziehen können, und pandas hält die gescrapeten Daten in einem DataFrame für die Analyse am Ende.

Schritt 1: Eine SERP über die Crawling API abrufen

Beginnen Sie damit, das HTML zu laden. Schreiben Sie eine kleine crawl()-Funktion, die Ihre Ziel-Google-Such-URL mit Ihrem Token an die Crawling API sendet, überprüft, dass die zugrundeliegende Seite mit einem 200-Status zurückgekommen ist, und den HTML-Body zurückgibt. Übergeben Sie "javascript": "true", damit die API die Seite mit einem echten Browser rendert, bevor sie zurückgegeben wird, was die script-geladenen Features wie den PAA-Kasten befüllt. Die Überprüfung des Status vor dem Parsen macht Fehler laut statt still.

python
import json
import requests
from urllib.parse import quote_plus

API_TOKEN = "YOUR_CRAWLBASE_TOKEN"  # replace with your token
API_ENDPOINT = "https://api.crawlbase.com/"

def search_url(keyword):
    return f"https://www.google.com/search?q={quote_plus(keyword)}&hl=en&gl=us"

def crawl(url):
    params = {"token": API_TOKEN, "url": url, "javascript": "true"}
    response = requests.get(API_ENDPOINT, params=params)
    response.raise_for_status()

    data = json.loads(response.text)
    if data["original_status"] != 200:
        raise Exception(f"Unable to crawl '{url}'")

    return data["body"]

if __name__ == "__main__":
    html = crawl(search_url("web scraping api"))
    print(html[:500])

Die API gibt einen JSON-Umschlag zurück, daher laden Sie die Antwort mit json.loads und lesen zwei Felder: original_status ist der Status, den Google selbst zurückgegeben hat, und body ist das gerenderte Seiten-HTML. Das Bewachen auf original_status bedeutet, dass eine CAPTCHA-Seite oder eine Blockierung als Ausnahme auftaucht, anstatt Müll in den Parser zu speisen. Der search_url()-Helper URL-kodiert das Keyword und fixiert Sprache und Region mit hl=en und gl=us, sodass die Ergebnisse von Lauf zu Lauf konsistent sind. Führen Sie das Skript mit python crawling.py aus und Sie sollten echtes SERP-Markup in den ersten 500 Zeichen sehen, was bestätigt, dass der Abruf funktioniert, bevor Sie einen einzigen Selektor schreiben.

Crawlbase Google Scraper

Diese original_status-Überprüfung liest immer nur 200, weil die Anfrage Google als echter Besucher erreicht hat, CAPTCHA bereits gelöst. Die Crawling API ruft jede SERP von einer rotierenden IP ab, rendert das JavaScript, das den PAA-Kasten und verwandte Suchanfragen befüllt, und gibt Ihnen fertiges HTML, sodass Sie selbst keine Headless-Browser-Fleet und keinen Residential-Proxy-Pool betreiben müssen. Testen Sie es zuerst auf einer öffentlichen Such-URL im kostenlosen Kontingent.

Schritt 2: Die SEO-Felder mit BeautifulSoup parsen

Mit HTML in der Hand laden Sie es in BeautifulSoup und ziehen jedes Ergebnis anhand seines Selektors heraus. Google verpackt jedes organische Ergebnis in einem Container mit dem Titel in einem h3-Tag, dem Ziel im Anker darum und dem Snippet in einem Beschreibungsblock daneben. Die PAA-Fragen und verwandten Suchanfragen befinden sich weiter unten in ihren eigenen Blöcken. Überprüfen Sie eine Live-SERP in den Entwicklertools Ihres Browsers (Rechtsklick, dann Inspizieren), um die aktuellen Klassennamen zu bestätigen; die folgenden Selektoren entsprechen dem Layout zum Zeitpunkt der Erstellung dieses Dokuments.

python
from urllib.parse import urlparse
from bs4 import BeautifulSoup

def scrape_serp(html, keyword):
    soup = BeautifulSoup(html, "html.parser")

    results = []
    for position, block in enumerate(soup.select("div.g"), start=1):
        heading = block.select_one("h3")
        link = block.select_one("a[href]")
        snippet = block.select_one("div.VwiC3b")
        if not heading or not link:
            continue
        url = link["href"]
        results.append({
            "keyword": keyword,
            "position": position,
            "title": heading.get_text(strip=True),
            "url": url,
            "domain": urlparse(url).netloc,
            "snippet": snippet.get_text(strip=True) if snippet else None,
        })

    paa = [
        q.get_text(strip=True)
        for q in soup.select("div.related-question-pair")
        if q.get_text(strip=True)
    ]

    related = [
        r.get_text(strip=True)
        for r in soup.select("div.y6Uyqe div.b2Rnsc, a.k8XOCe")
        if r.get_text(strip=True)
    ]

    return {
        "keyword": keyword,
        "results": results,
        "people_also_ask": paa,
        "related_searches": related,
    }

Der Selektor div.g ist der Wrapper, den Google für jedes organische Ergebnis verwendet, mit der Überschrift in einem h3-Tag, dem Ziel im Anker darum und dem Snippet in div.VwiC3b. enumerate(..., start=1) gibt Ihnen den Rang kostenlos dazu, sodass die Position aus der Seitenreihenfolge statt einem fragilen Attribut kommt. urlparse(url).netloc leitet die Domain aus jedem Link ab, das Schlüsselfeld für die spätere Wettbewerberanalyse. Der if not heading or not link: continue-Guard hält Anzeigen und herumhängendes Markup aus Ihrer Ausgabe. PAA-Fragen kommen aus div.related-question-pair, und verwandte Suchanfragen aus dem Vorschlagsblock am Ende der Seite.

Selektoren driften

Google rotiert seine Ergebnis-Container-Klassennamen wie VwiC3b und related-question-pair, wenn es sein Frontend neu bereitstellt, manchmal werden dabei gleichzeitig mehrere Layouts A/B-getestet. Behandeln Sie die obigen Selektoren als Startvorlage, nicht als Vertrag. Wenn ein Feld für alle Ergebnisse leer zurückkommt, überprüfen Sie eine Live-SERP in den Entwicklertools Ihres Browsers und aktualisieren Sie den Selektor. Regelmäßige Selektor-Wartung ist für jeden produktiven Scraper normal, kein Zeichen dafür, dass etwas kaputt ist.

Schritt 3: Über Ihre Keywords ausführen

Verbinden Sie jetzt den Abruf und das Parsen in einem lauffähigen Skript, das über eine Liste von Ziel-Keywords schleift, die strukturierten SEO-Daten für jedes sammelt und alles in JSON schreibt. Das Pacing der Schleife mit einem kurzen Sleep hält einen Multi-Keyword-Lauf gesund, anstatt Anfragen hintereinander abzufeuern.

python
import json
import time
import requests
from urllib.parse import quote_plus, urlparse
from bs4 import BeautifulSoup

API_TOKEN = "YOUR_CRAWLBASE_TOKEN"
API_ENDPOINT = "https://api.crawlbase.com/"

KEYWORDS = [
    "web scraping api",
    "how to scrape google",
    "rotating proxy service",
]

def search_url(keyword):
    return f"https://www.google.com/search?q={quote_plus(keyword)}&hl=en&gl=us"

def crawl(url):
    params = {"token": API_TOKEN, "url": url, "javascript": "true"}
    response = requests.get(API_ENDPOINT, params=params)
    response.raise_for_status()
    data = json.loads(response.text)
    if data["original_status"] != 200:
        raise Exception(f"Unable to crawl '{url}'")
    return data["body"]

def scrape_serp(html, keyword):
    soup = BeautifulSoup(html, "html.parser")
    results = []
    for position, block in enumerate(soup.select("div.g"), start=1):
        heading = block.select_one("h3")
        link = block.select_one("a[href]")
        snippet = block.select_one("div.VwiC3b")
        if not heading or not link:
            continue
        url = link["href"]
        results.append({
            "keyword": keyword,
            "position": position,
            "title": heading.get_text(strip=True),
            "url": url,
            "domain": urlparse(url).netloc,
            "snippet": snippet.get_text(strip=True) if snippet else None,
        })
    paa = [q.get_text(strip=True) for q in soup.select("div.related-question-pair") if q.get_text(strip=True)]
    related = [r.get_text(strip=True) for r in soup.select("div.y6Uyqe div.b2Rnsc, a.k8XOCe") if r.get_text(strip=True)]
    return {"keyword": keyword, "results": results, "people_also_ask": paa, "related_searches": related}

def main():
    serps = []
    for keyword in KEYWORDS:
        html = crawl(search_url(keyword))
        serps.append(scrape_serp(html, keyword))
        print(f"Scraped '{keyword}': {len(serps[-1]['results'])} results")
        time.sleep(2)
    with open("google_seo_data.json", "w", encoding="utf-8") as f:
        json.dump(serps, f, ensure_ascii=False, indent=2)

if __name__ == "__main__":
    main()

Führen Sie das vollständige Skript mit python main.py aus. Es schleift über die drei Beispiel-Keywords, ruft jede SERP ab und rendert sie, extrahiert die organischen Ergebnisse sowie die PAA- und Verwandte-Suchanfragen-Blöcke und schreibt alles in google_seo_data.json. Ersetzen Sie die Beispiel-Keywords durch Ihre eigenen Ziel-Keywords und dieselben zwei Funktionen verarbeiten alles, was zurückkommt. Für einen tieferen Walkthrough des Scrapings selbst, einschließlich der Paginierung über Ergebnisseiten, lesen Sie unseren fokussierten Leitfaden zum Scrapen von Google-Suchergebnissen mit Python.

Wie die Ausgabe aussieht

Sie erhalten ein strukturiertes Objekt pro Keyword: die organischen Ergebnisse in Rangfolge, jeweils mit abgeleiteter Domain, sowie die PAA-Fragen und verwandten Suchanfragen, die Google der Abfrage angehängt hat.

json
{
  "keyword": "web scraping api",
  "results": [
    {
      "keyword": "web scraping api",
      "position": 1,
      "title": "Crawling API - Crawlbase",
      "url": "https://crawlbase.com/crawling-api-avoid-captchas-blocks",
      "domain": "crawlbase.com",
      "snippet": "Crawl any website with a single API call and skip blocks and CAPTCHAs."
    },
    {
      "keyword": "web scraping api",
      "position": 2,
      "title": "Best Web Scraping APIs Compared",
      "url": "https://example-blog.com/web-scraping-apis",
      "domain": "example-blog.com",
      "snippet": "A side-by-side look at popular scraping APIs and how they handle blocks."
    }
  ],
  "people_also_ask": [
    "What is a web scraping API?",
    "Is using a scraping API legal?"
  ],
  "related_searches": [
    "free web scraping api",
    "web scraping api python"
  ]
}

Das ist das Rohmaterial für jede SEO-Frage, die Sie stellen möchten: Rankings befinden sich in position, die Wettbewerbslandschaft in domain, Click-Through-Signale in title und snippet, und Content-Ideen in people_also_ask und related_searches.

Die SEO-Daten mit pandas analysieren

Scraping liefert Daten; pandas verwandelt sie in Erkenntnisse. Laden Sie die flache Liste der organischen Ergebnisse in einen DataFrame und Sie können die drei Fragen beantworten, die die meiste SEO-Arbeit antreiben: Wo ranke ich, mit wem konkurriere ich, und was habe ich nicht abgedeckt. Der alte Ansatz, eine CSV zu lesen und Top-Domains zu zählen, funktioniert immer noch; hier machen wir es direkt von den gescrapeten Objekten.

python
import json
import pandas as pd

with open("google_seo_data.json", encoding="utf-8") as f:
    serps = json.load(f)

# Flatten every organic result across all keywords into one table
rows = [r for serp in serps for r in serp["results"]]
df = pd.DataFrame(rows)

# 1. Where do I rank? Find your own domain's position per keyword
MY_DOMAIN = "crawlbase.com"
mine = df[df["domain"] == MY_DOMAIN][["keyword", "position", "title"]]
print("Your rankings:")
print(mine.to_string(index=False))

# 2. Who am I competing with? Domains that appear most across SERPs
top_domains = df["domain"].value_counts().head(10)
print("\nTop competing domains:")
print(top_domains)

# 3. Content gaps: PAA and related searches you have not covered yet
ideas = []
for serp in serps:
    for q in serp["people_also_ask"] + serp["related_searches"]:
        ideas.append({"keyword": serp["keyword"], "idea": q})
gaps = pd.DataFrame(ideas).drop_duplicates()
print(f"\n{len(gaps)} content ideas from PAA and related searches")
print(gaps.head(10).to_string(index=False))

df.to_csv("google_seo_results.csv", index=False)

Drei Analysen kommen daraus hervor. Die erste filtert die Tabelle auf Ihre eigene Domain und gibt Ihre Position pro Keyword aus, also Rang-Tracking. Die zweite führt value_counts() auf der domain-Spalte aus, um die Seiten hervorzuheben, die in Ihrem Keyword-Set am häufigsten erscheinen, also die Wettbewerber, die Ihre Nische dominieren. Die dritte bündelt alle PAA-Fragen und verwandten Suchanfragen in eine deduplizierte Liste von Content-Ideen: echte Nutzeranfragen, die Sie beantworten können, um Featured Snippets und Long-Tail-Traffic zu gewinnen. Die letzte Zeile schreibt die flachen Ergebnisse in google_seo_results.csv, damit Sie Rankings von Woche zu Woche vergleichen können.

Woher Volumen und CPC kommen

Suchvolumen, Keyword-Schwierigkeit und CPC sind nicht auf der SERP gedruckt, daher erfindet dieser Workflow sie nicht. Ziehen Sie diese aus einem Keyword-Tool wie Google Keyword Planner, Ahrefs oder SEMrush und fügen Sie sie über die keyword-Spalte in den DataFrame ein, um die Rankingposition mit der Opportunitätsgröße zu kombinieren. Für mehr zur Umwandlung gescrapeter Signale in Strategie lesen Sie unseren Leitfaden zur Verwendung von Daten zur SEO-Verbesserung.

Skalierung über Keywords und Wettbewerber

Drei Keywords sind eine Demo; ein echter Job verfolgt Dutzende oder Hunderte, manchmal auch gegenüber den Anzeigenergebnissen. Die Form bleibt dieselbe: Erweitern Sie die KEYWORDS-Liste, rufen Sie jede SERP über die Crawling API ab und parsen Sie sie mit derselben Funktion. Einige Gewohnheiten halten einen größeren Lauf gesund.

  • Pacing Ihrer Anfragen. Behalten Sie das time.sleep() zwischen Keywords bei und vermeiden Sie es, Hunderte von Suchen in einer engen Schleife auszuführen. Das Verteilen der Arbeit ist der entscheidende Faktor, um entsperrt zu bleiben.
  • Blockierte URLs günstig wiederholen. Jede 5XX-Antwort von der API ist kostenlos, sodass Sie ein Keyword, das blockiert oder nicht verfügbar zurückgekommen ist, ohne Kosten wiederholen können.
  • Erneut inspizieren, wenn Felder leer werden. Google ändert sein Markup häufig. Wenn eine Spalte durchgehend null ist, öffnen Sie eine Live-SERP in den Entwicklertools und aktualisieren Sie den Selektor.
  • Wiederholungsläufe planen. Rankings ändern sich, also führen Sie dieselbe Keyword-Menge wöchentlich aus und speichern Sie jeden Lauf mit einer Datumsspalte, um die Position im Zeitverlauf zu verfolgen.

Wenn Sie auch die bezahlte Seite der SERP untersuchen möchten, gilt dasselbe Abruf-und-Parse-Muster für gesponserte Ergebnisse; unser Leitfaden zur Analyse von Konkurrenten-Google-Ads führt durch dieses Thema. Für das breitere Anti-Block-Playbook lesen Sie wie man Websites ohne Blockierung scrapt.

Ob das Scrapen von Google erlaubt ist, hängt von Googles Nutzungsbedingungen, Ihrer Gerichtsbarkeit und dem ab, was Sie mit den Daten tun. Googles Bedingungen setzen Grenzen für den automatisierten Zugriff auf seinen Suchdienst, sodass das Scrapen unabhängig von der Sorgfalt Ihres Werkzeugs gegen diese Bedingungen verstoßen kann. Keiner der hier aufgeführten Codes ändert das; er macht nur den technischen Teil funktionsfähig. Lesen Sie Googles Bedingungen und die robots.txt und behandeln Sie beide als Grenze für das, was Sie sammeln.

Einige Leitlinien, die es wert sind, einzuhalten: Sammeln Sie nur öffentliche Suchergebnis-Daten: die Rankings, Titel, Snippets, PAA-Fragen und verwandten Suchanfragen, die jeder auf einer Ergebnisseite ohne Konto sehen kann. Halten Sie Ihr Anfragevolumen so niedrig, dass Sie Googles Server nicht belasten, und verteilen Sie Ihren Crawl, anstatt ihn mit voller Geschwindigkeit auszuführen. Die Titel und Snippets auf der Seite sind Googles Darstellung von Inhalten anderer Seiten, verwenden Sie sie also als analytische Signale, nicht als Medien, die Sie in vollem Umfang weiterveröffentlichen.

Dieser Workflow ist bewusst auf öffentliche SERP-Daten beschränkt, weil das die Grenze ist, die die Arbeit vertretbar macht. Er deckt nichts hinter einem Login, Konto- oder personenbezogene Daten oder urheberrechtlich geschützte Medien, die von den verlinkten Zielen abgerufen werden, nicht ab. Für sanktionierten, hochvolumigen Zugriff auf Google-Daten bietet Google offizielle Produkte wie die Custom Search JSON API und für Anzeigendaten die Google Ads API; das sind die korrekten Wege, wenn ein Projekt die öffentliche SERP-Analyse übersteigt. Verwenden Sie einen Scraper, um zu lesen, was auf der Seite steht, nicht um darüber hinaus zu reichen.

Zusammenfassung

Wichtigste Erkenntnisse

  • SEO lebt auf der SERP. Rankings, Titel, Snippets, PAA-Fragen und verwandte Suchanfragen sind alle öffentlich auf der Ergebnisseite, und zusammen kartieren sie Ihre Position, Ihre Wettbewerber und Ihre Content-Lücken.
  • Eine einfache Anfrage wird blockiert. Google fordert Datacenter-IPs mit CAPTCHAs heraus und rendert Features in JavaScript, daher benötigen Sie eine vertrauenswürdige IP plus Rendering, was die Crawling API in einem Aufruf übernimmt.
  • BeautifulSoup übernimmt die Extraktion. Wählen Sie jedes div.g für organische Ergebnisse aus, leiten Sie die Domain aus jeder URL ab und ziehen Sie PAA und verwandte Suchanfragen aus ihren eigenen Blöcken; rechnen Sie damit, dass die Klassennamen driften.
  • pandas verwandelt Daten in Erkenntnisse. Flachen Sie die Ergebnisse in einen DataFrame ab, filtern Sie auf Ihre Domain für Rang-Tracking, führen Sie value_counts() auf Domains für Wettbewerber aus und bündeln Sie PAA plus verwandte Suchanfragen für Content-Ideen.
  • Bleiben Sie bei öffentlichen Daten. Respektieren Sie Googles ToS und robots.txt, halten Sie das Volumen niedrig, beziehen Sie Volumen und CPC aus einem Keyword-Tool und nutzen Sie Googles offizielle APIs für sanktionierten hochvolumigen Zugriff.

Häufig gestellte Fragen

Welche SEO-Daten kann ich aus Google-Suchergebnissen extrahieren?

Sie können organische Suchrankings, Meta-Titel, Meta-Beschreibungen (Snippets), Ergebnis-URLs und deren Domains, "Menschen fragen auch"-Fragen und verwandte Suchanfragen abrufen. Das deckt Rang-Tracking, Wettbewerberanalyse und Content-Ideen ab. Suchvolumen und CPC stehen nicht auf der Seite, daher ziehen Sie diese aus einem Keyword-Tool wie Google Keyword Planner, Ahrefs oder SEMrush und fügen Sie sie ein.

Wie scrapt man Google-Suchergebnisse, ohne blockiert zu werden?

Google fordert automatisierten Traffic mit CAPTCHAs und Ratenbeschränkungen heraus, besonders von Datacenter-IPs. Rotieren Sie IPs, paced Ihre Anfragen, rendern Sie JavaScript, damit script-geladene Features erscheinen, und lassen Sie einen verwalteten Service die CAPTCHA-Seite übernehmen. Das Abrufen über die Crawling API, die IPs rotiert und CAPTCHAs serverseitig löst, lässt jede Anfrage wie einen gewöhnlichen Besucher aussehen, sodass Sie die echte SERP zurückerhalten.

Welche Tools benötige ich, um Google-SEO-Daten zu extrahieren und zu analysieren?

Drei Bibliotheken decken es ab: die Crawling API zum Abrufen und Rendern jeder SERP ohne Blockierung, BeautifulSoup zum Parsen der organischen Ergebnisse und SERP-Features aus dem HTML, und pandas zum Laden von allem in einen DataFrame für Ranking-, Wettbewerber- und Content-Lücken-Analyse. Ein Keyword-Tool wie Ahrefs oder SEMrush ergänzt Volumen und Schwierigkeit.

Wie finde ich Content-Lücken aus einer SERP?

Sammeln Sie die "Menschen fragen auch"-Fragen und verwandten Suchanfragen für jedes Ziel-Keyword, bündeln Sie sie in einer deduplizierten Liste und vergleichen Sie sie mit den Themen, die Ihre Seite bereits abdeckt. Die verbleibenden Fragen sind echte Nutzeranfragen, die Sie noch nicht beantwortet haben, was genau der Ort ist, an dem neue Content- und Featured-Snippet-Möglichkeiten entstehen.

Kann ich Ranking-Änderungen im Laufe der Zeit verfolgen?

Ja. Führen Sie dasselbe Keyword-Set nach einem Zeitplan aus, wöchentlich ist üblich, und schreiben Sie jeden Lauf in eine CSV mit einer Datumsspalte. Das Filtern der kombinierten Tabelle auf Ihre eigene Domain gibt Ihnen einen Positionsverlauf pro Keyword, den Sie mit pandas oder einer Tabellenkalkulation darstellen können, um zu sehen, ob Ihre SEO-Arbeit Früchte trägt.

Bietet Google eine offizielle API für diese Daten an?

Google stellt offizielle Produkte für einiges davon bereit, beispielsweise die Custom Search JSON API für programmgesteuerte Suche und die Google Ads API für Werbedaten. Sie sind der sanktionierte Weg für hochvolumige oder kommerzielle Nutzung. Für die öffentlichen SERP-Signale, die dieser Leitfaden abdeckt, ist das Scrapen der gerenderten Ergebnisseite über die Crawling API eine praktische Option, solange Sie innerhalb von Googles Bedingungen bleiben und bei öffentlichen Daten bleiben.

Jetzt loslegen

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.

Self-Service · Kein Verkaufsgespräch erforderlich · Enterprise-Crawl-Volumen verfügbar