Kurze Antwort
Wie bekomme ich 2026 Google-Suchergebnisse in Python?
Rufen Sie eine SERP-API aus Python auf und lesen Sie das zurückgegebene JSON; rufen Sie google.com nicht selbst ab, denn Google verlangt seit dem 17. Januar 2025 JavaScript und seine robots.txt untersagt /search. Mit SerpCrypto liefert eine requests.get an https://serpcrypto.com/api/v1/search organische Ergebnisse, People Also Ask und mehr, für einen Credit pro Suchanfrage ab 0,30 $/1K Suchanfragen, Stand Oktober 2026. Ohne KYC; mit Krypto bezahlen.
Was Sie brauchen
| Python | 3.9 oder neuer |
|---|---|
| Pakete | requests für die Grundlagen; pandas für Tabellen; httpx für async |
| API-Schlüssel | Aus Ihrem SerpCrypto-Dashboard, gespeichert in der Umgebungsvariable SERPCRYPTO_API_KEY |
| Endpoint | GET https://serpcrypto.com/api/v1/search |
| Kosten | 1 Credit = 1 erfolgreiche Suchanfrage, die eine Ergebnisseite auf jeder unterstützten Engine liefert. Eine fehlgeschlagene Anfrage wird nicht berechnet |
| Kleinstes Pack | 10.000 Suchanfragen für 7,50 $; Credits verfallen nie |
Warum funktioniert requests.get auf google.com nicht mehr?
Weil die Ergebnisse nicht mehr im HTML stehen, das ein einfacher HTTP-Client erhält. Am 17. Januar 2025 begann Google, für die Suche JavaScript zu verlangen; Google erklärte, JavaScript helfe, die Dienste vor Bots zu schützen, und weniger als 0,1 % der Suchanfragen stammten von Nutzern mit deaktiviertem JavaScript, wie TechCrunch berichtete.
Die robots.txt von Google, gelesen am 22. Oktober 2026, führt zudem Disallow: /search für alle User-Agents. Eine SERP-API übernimmt das Ausführen der Suchanfrage und das Parsen der Seite, und Ihr Python-Code hat es nur mit JSON zu tun. Das ist der Ansatz im Rest dieses Leitfadens.
Wie stelle ich die erste Anfrage?
Installieren Sie requests, legen Sie Ihren Schlüssel in einer Umgebungsvariable ab und senden Sie die Suchanfrage mit einem Land und einer Sprache. Die Antwort ist ein Dictionary mit einem Schlüssel pro Block der Ergebnisseite; organic_results enthält die gerankten Links.
Halten Sie den Schlüssel aus Ihrem Quellcode heraus. Unter macOS und Linux export SERPCRYPTO_API_KEY=... in der Shell; unter Windows PowerShell $env:SERPCRYPTO_API_KEY="...".
import os
import requests
API = "https://serpcrypto.com/api/v1/search"
KEY = os.environ["SERPCRYPTO_API_KEY"]
resp = requests.get(
API,
headers={"Authorization": "Bearer " + KEY},
params={"engine": "google", "q": "best hiking boots", "gl": "us", "hl": "en"},
timeout=60,
)
resp.raise_for_status()
results = resp.json()
for item in results.get("organic_results", []):
print(item["position"], item["title"])
print(" ", item["link"])
for q in results.get("people_also_ask", []):
print("PAA:", q["question"])
Wie wandle ich die Ergebnisse in einen pandas DataFrame um?
Bauen Sie eine Zeile pro organischem Ergebnis und behalten Sie die Suchanfrage daneben. Ein DataFrame macht es einfach, zu sortieren, nach Domain zu filtern oder nach CSV und Excel zu exportieren. Fehlende Felder, etwa date bei den meisten Ergebnissen, werden zu leeren Zellen statt zu Fehlern.
import os
from urllib.parse import urlparse
import pandas as pd
import requests
API = "https://serpcrypto.com/api/v1/search"
HEADERS = {"Authorization": "Bearer " + os.environ["SERPCRYPTO_API_KEY"]}
def organic_rows(query, gl="us", hl="en"):
params = {"engine": "google", "q": query, "gl": gl, "hl": hl}
resp = requests.get(API, headers=HEADERS, params=params, timeout=60)
resp.raise_for_status()
for r in resp.json().get("organic_results", []):
yield {
"query": query,
"position": r.get("position"),
"title": r.get("title"),
"domain": urlparse(r.get("link", "")).netloc,
"link": r.get("link"),
"snippet": r.get("snippet"),
}
queries = ["crm for small business", "invoice software", "time tracking app"]
df = pd.DataFrame([row for q in queries for row in organic_rows(q)])
print(df.groupby("domain").size().sort_values(ascending=False).head(10))
df.to_csv("serp_results.csv", index=False)
Wie führe ich viele Suchanfragen gleichzeitig aus?
Verwenden Sie httpx mit asyncio und begrenzen Sie die Anzahl gleichzeitig laufender Anfragen mit einem Semaphore. Ihr Konto hat ein Nebenläufigkeitslimit, das im Dashboard angezeigt wird; bleiben Sie darunter, um 429-Fehler zu vermeiden. Beginnen Sie mit einer kleinen Zahl, etwa 5, und setzen Sie sie auf das Limit, das Ihr Dashboard anzeigt.
import asyncio
import os
import httpx
API = "https://serpcrypto.com/api/v1/search"
HEADERS = {"Authorization": "Bearer " + os.environ["SERPCRYPTO_API_KEY"]}
LIMIT = asyncio.Semaphore(5)
async def search(client, query):
async with LIMIT:
resp = await client.get(API, params={"engine": "google", "q": query, "gl": "us", "hl": "en"})
resp.raise_for_status()
data = resp.json()
top = data.get("organic_results", [])[:3]
return query, [r["link"] for r in top]
async def main(queries):
async with httpx.AsyncClient(headers=HEADERS, timeout=60) as client:
for query, links in await asyncio.gather(*(search(client, q) for q in queries)):
print(query, links)
if __name__ == "__main__":
asyncio.run(main(["python web framework", "python orm", "python task queue"]))
Wie bekomme ich mehr als 10 Ergebnisse und speichere sie?
Fordern Sie die nächsten Seiten mit page=2, page=3 und so weiter an, bis zu page=10. Jede Seite ist eine Suchanfrage und ein Credit, denn Google liefert seit September 2025 etwa 10 organische Ergebnisse pro Seite, nachdem num=100 nicht mehr berücksichtigt wird.
Speichern Sie jede Rohantwort als eine Zeile einer JSONL-Datei. Rohes JSON enthält jeden Block, sodass Sie später neue Fragen beantworten können, ohne dieselben Suchanfragen erneut zu bezahlen.
import json
import os
import requests
API = "https://serpcrypto.com/api/v1/search"
HEADERS = {"Authorization": "Bearer " + os.environ["SERPCRYPTO_API_KEY"]}
def fetch_pages(query, pages=3, path="serp.jsonl"):
with open(path, "a", encoding="utf-8") as out:
for page in range(1, pages + 1):
params = {"engine": "google", "q": query, "gl": "us", "hl": "en", "page": page}
resp = requests.get(API, headers=HEADERS, params=params, timeout=60)
resp.raise_for_status()
data = resp.json()
out.write(json.dumps(data, ensure_ascii=False) + "\n")
if not data.get("organic_results"):
break
fetch_pages("electric cargo bike", pages=3)
Was kostet es, diesen Code auszuführen?
Jeder Aufruf in diesen Beispielen ist eine Suchanfrage. Das erste Beispiel kostet einen Credit, das DataFrame-Beispiel drei und das JSONL-Beispiel bis zu drei. Eine fehlgeschlagene Anfrage wird nicht berechnet.
10.000 Suchanfragen kosten 7,50 $ und 100.000 Suchanfragen kosten 56,25 $, Stand Oktober 2026; der Preis sinkt auf 0,30 $/1K Suchanfragen bei 5.000.000 Suchanfragen. Credits verfallen nie. Sie zahlen in BTC, USDT, USDC, ETH, SOL, LTC aus einem 25 $-Guthaben, ohne Ausweis-Upload. Siehe Preise.
Google-Ergebnisse in Python: häufige Fragen
Kann ich BeautifulSoup auf Google-Suchergebnisseiten verwenden?
Nicht zuverlässig. Google verlangt seit Januar 2025 JavaScript, daher enthält das HTML, das ein einfacher Client empfängt, nicht die Ergebnisse, und Googles robots.txt verbietet /search. Eine SERP-API liefert die geparsten Felder stattdessen als JSON.
Gibt es eine offizielle Python-Bibliothek für SerpCrypto?
Nein. Die API ist ein einfacher HTTPS-Endpoint, daher genügen requests oder httpx. Die Beispiele auf dieser Seite und auf der Python-Dokumentationsseite sind Copy-Paste-Code, kein veröffentlichtes Paket.
Wie bekomme ich Ergebnisse für ein anderes Land?
Setzen Sie gl auf den Ländercode und hl auf die Sprache, zum Beispiel gl=fr und hl=fr für Frankreich. Fügen Sie location für eine Stadt hinzu. Die Seite mit den Standorten listet gängige Codes.
Wie gehe ich mit Fehlern und Wiederholungen um?
Rufen Sie raise_for_status() auf und wiederholen Sie dann 429-, 502- und 504-Antworten nach einer wachsenden Verzögerung. Fehlgeschlagene Anfragen werden nicht berechnet. Die Fehlerseite enthält eine vollständige Wiederholungsfunktion.
Kann ich mit demselben Code Bing-Ergebnisse bekommen?
Ja. Ändern Sie engine zu bing; die Antwort behält dieselbe Struktur, mit organic_results und related_searches.
Quellen (3)
- Google verlangt ab sofort JavaScript für die Google-Suche — TechCrunch (2025-01-17)
- google.com robots.txt — Google (read 2026-10-22)
- Google zwingt Rank-Tracker in 500 bis 1.000 Anfragen pro Query — PPC Land (2026-08-27)