⚠️ Seit Januar 2025 fordert Google JavaScript, um Suchergebnisse zu rendern. Dieses Update zielt darauf ab, traditionelle Bots, Scraper und SEO-Tools zu blockieren, die auf nicht JavaScript-basierten Methoden beruhen. Infolgedessen müssen Unternehmen, die Google Search für Marktforschung oder Ranking-Analysen nutzen, Tools einsetzen, die JavaScript-Rendering unterstützen.
Dieses Repository bietet zwei Ansätze zum Sammeln von Google SERP-Daten:
- Ein kostenloser Scraper für kleine Umfänge, geeignet für grundlegende Datenerfassung
- Eine API-Lösung auf Enterprise-Niveau, entwickelt für hohe Volumina und robuste Datenanforderungen
Ein leichtgewichtiger Google-Scraper für grundlegende Anforderungen an die Datenerfassung.
- File: Liste der Suchbegriffe, die in Google abgefragt werden sollen (erforderlich)
- Pages: Anzahl der Google-Seiten, aus denen Daten gescrapt werden sollen
Ändern Sie diese Parameter in der Python file:
HEADLESS = False
MAX_RETRIES = 2
REQUEST_DELAY = (1, 4)
SEARCH_TERMS = [
"nike shoes",
"macbook pro"
]
PAGES_PER_TERM = 3 💡 Tipp: Setzen Sie HEADLESS = False, um Googles Erkennungsmechanismen besser zu vermeiden.
Google implementiert mehrere Anti-Scraping-Maßnahmen:
- CAPTCHAs: Werden verwendet, um zwischen Menschen und Bots zu unterscheiden
- IP Blocks: Temporäre oder permanente Sperren bei verdächtiger Aktivität
- Rate Limiting: Schnelle Anfragen können Sperren auslösen
- Geotargeting: Ergebnisse variieren je nach Standort, Sprache und Gerät
- Honeypot Traps: Versteckte Elemente zur Erkennung automatisierten Zugriffs
Nach mehreren Anfragen werden Sie wahrscheinlich auf Googles CAPTCHA-Abfrage stoßen:
Die Google Search API von Bright Data liefert Suchergebnisse von Google von echten Nutzern mithilfe anpassbarer Suchparameter. Basierend auf derselben fortschrittlichen Technologie wie die SERP API bietet sie hohe Erfolgsraten und robuste Performance für das Scraping öffentlich verfügbarer Daten im großen Maßstab.
- Hohe Erfolgsraten, selbst bei großen Volumina
- Sie zahlen nur für erfolgreiche Anfragen
- Schnelle Antwortzeit – unter 5 Sekunden
- Geolokalisierungs-Targeting – Extrahieren Sie Daten aus jedem Land, jeder Stadt oder von jedem Gerät
- Ausgabeformate – Datenabruf als JSON oder rohes HTML
- Mehrere Suchtypen – News, Bilder, Shopping, Jobs usw.
- Asynchrone Anfragen – Ergebnisse stapelweise abrufen
- Für Skalierung gebaut – Bewältigt hohen Traffic und Spitzenlasten
📌 Testen Sie es kostenlos in unserem SERP Playground:
- Prerequisites:
- Erstellen Sie ein Bright Data account (neue Nutzer erhalten ein $5-Guthaben)
- Beschaffen Sie Ihren API key
- Setup: Folgen Sie der step-by-step guide, um die SERP API in Ihr Bright Data-Konto zu integrieren
- Implementation Methods:
- Direct API Access
- Native Proxy-Based Access
Die einfachste Methode ist, eine direkte Anfrage an die API zu senden.
cURL Example
curl https://api.brightdata.com/request \
-H "Content-Type: application/json" \
-H "Authorization: Bearer API_TOKEN" \
-d '{
"zone": "ZONE_NAME",
"url": "https://www.google.com/search?q=ollama&brd_json=1",
"format": "raw"
}'Python Example
import requests
import json
url = "https://api.brightdata.com/request"
headers = {"Content-Type": "application/json", "Authorization": "Bearer API_TOKEN"}
payload = {
"zone": "ZONE_NAME",
"url": "https://www.google.com/search?q=ollama&brd_json=1",
"format": "raw",
}
response = requests.post(url, headers=headers, json=payload)
with open("serp_direct_api.json", "w") as file:
json.dump(response.json(), file, indent=4)
print("Response saved to 'serp_direct_api.json'.")👉 Sehen Sie sich die full JSON output an
Hinweis: Verwenden Sie
brd_json=1für geparstes JSON oderbrd_json=htmlfür geparstes JSON + vollständiges verschachteltes HTML.
Erfahren Sie mehr über das Parsen von Suchergebnissen in unserem SERP API Parsing Guide.
Alternativ können Sie unsere Proxy-Routing-Methode verwenden.
cURL Example
curl -i \
--proxy brd.superproxy.io:33335 \
--proxy-user "brd-customer-<CUSTOMER_ID>-zone-<ZONE_NAME>:<ZONE_PASSWORD>" \
-k \
"https://www.google.com/search?q=ollama"Python Example
import requests
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
host = "brd.superproxy.io"
port = 33335
username = "brd-customer-<customer_id>-zone-<zone_name>"
password = "<zone_password>"
proxy_url = f"http://{username}:{password}@{host}:{port}"
proxies = {"http": proxy_url, "https": proxy_url}
url = "https://www.google.com/search?q=ollama"
response = requests.get(url, proxies=proxies, verify=False)
with open("serp_native_proxy.html", "w", encoding="utf-8") as file:
file.write(response.text)
print("Response saved to 'serp_native_proxy.html'.")👉 Sehen Sie sich die full HTML output an
Für die Produktion laden Sie das SSL-Zertifikat von Bright Data (siehe unseren SSL Certificate Guide).
-
gl(Country Code)- Zweistelliger Ländercode, der das Land für die Suchergebnisse bestimmt
- Simuliert eine Suche, als ob sie aus einem bestimmten Land durchgeführt wurde
Beispiel: Suche nach Restaurants in Frankreich
curl --proxy brd.superproxy.io:33335 \ --proxy-user "brd-customer-<customer-id>-zone-<zone-name>:<zone-password>" \ "https://www.google.com/search?q=best+restaurants+in+paris&gl=fr"
-
hl(Language Code)- Zweistelliger Sprachcode, der die Sprache des Seiteninhalts festlegt
- Beeinflusst die Sprache der Benutzeroberfläche und der Suchergebnisse
Beispiel: Suche nach Sushi-Restaurants in Japan (Ergebnisse auf Japanisch)
curl --proxy brd.superproxy.io:33335 \ --proxy-user "brd-customer-<customer-id>-zone-<zone-name>:<zone-password>" \ "https://www.google.com/search?q=best+sushi+restaurants+in+tokyo&hl=ja"
Sie können beide Parameter zusammen verwenden, um eine bessere Lokalisierung zu erreichen:
curl --proxy brd.superproxy.io:33335 \ --proxy-user "brd-customer-<customer-id>-zone-<zone-name>:<zone-password>" \ "https://www.google.com/search?q=best+hotels+in+berlin&gl=de&hl=de"
-
tbm(Search Category)- Gibt einen bestimmten Suchtyp an (Bilder, News usw.)
- Options:
tbm=isch→ Bildertbm=shop→ Shoppingtbm=nws→ Newstbm=vid→ Videos
Example (Shopping-Suche):
curl --proxy brd.superproxy.io:33335 \ --proxy-user "brd-customer-<customer-id>-zone-<zone-name>:<zone-password>" \ "https://www.google.com/search?q=macbook+pro&tbm=shop" -
ibp(Jobs Search Parameter)- Speziell für jobsbezogene Suchen verwenden
- Beispiel:
ibp=htl;jobsgibt Stellenanzeigen zurück
Example:
curl --proxy brd.superproxy.io:33335 \ --proxy-user "brd-customer-<customer-id>-zone-<zone-name>:<zone-password>" \ "https://www.google.com/search?q=technical+copywriter&ibp=htl;jobs"
Navigieren Sie durch Ergebnisseiten oder passen Sie die Anzahl der angezeigten Ergebnisse an:
-
start- Definiert den Startpunkt für Suchergebnisse
- Beispiele:
start=0(default) - Erste Seitestart=10- Zweite Seite (Ergebnisse 11–20)start=20- Dritte Seite (Ergebnisse 21–30)
Example (Start ab dem 11. Ergebnis):
curl --proxy brd.superproxy.io:33335 \ --proxy-user "brd-customer-<customer-id>-zone-<zone-name>:<zone-password>" \ "https://www.google.com/search?q=best+coding+laptops+2025&start=10" -
num- Definiert, wie viele Ergebnisse pro Seite zurückgegeben werden
- Beispiele:
num=10(default) - Gibt 10 Ergebnisse zurücknum=50- Gibt 50 Ergebnisse zurück
Example (40 Ergebnisse zurückgeben):
curl --proxy brd.superproxy.io:33335 \ --proxy-user "brd-customer-<customer-id>-zone-<zone-name>:<zone-password>" \ "https://www.google.com/search?q=best+coding+laptops+2025&num=40"
Der Parameter uule passt Suchergebnisse basierend auf einem bestimmten Standort an:
- Er erfordert eine kodierte Zeichenfolge, keinen Klartext.
- Suchen Sie die Roh-Standortzeichenfolge in der Spalte Canonical Name der Google's geotargeting CSV.
- Konvertieren Sie die Rohzeichenfolge mithilfe eines Drittanbieter-Konverters oder einer integrierten Bibliothek in das kodierte Format.
- Fügen Sie die kodierte Zeichenfolge in Ihrer API-Anfrage als Wert für
uuleein.
curl --proxy brd.superproxy.io:33335 \
--proxy-user "brd-customer-<customer-id>-zone-<zone-name>:<zone-password>" \
"https://www.google.com/search?q=best+hotels+in+paris&uule=w+CAIQICIGUGFyaXM"Verwenden Sie den Parameter brd_mobile, um Anfragen von bestimmten Geräten zu simulieren:
| Value | Device | User-Agent Type |
|---|---|---|
0 or omit |
Desktop | Desktop |
1 |
Mobile | Mobile |
ios or iphone |
iPhone | iOS |
ipad or ios_tablet |
iPad | iOS Tablet |
android |
Android | Android |
android_tablet |
Android Tablet | Android Tablet |
Example: Mobile Search
curl --proxy brd.superproxy.io:33335 \
--proxy-user "brd-customer-<customer-id>-zone-<zone-name>:<zone-password>" \
"https://www.google.com/search?q=best+laptops&brd_mobile=1"Verwenden Sie den Parameter brd_browser, um Anfragen von bestimmten Browsern zu simulieren:
brd_browser=chrome— Google Chromebrd_browser=safari— Safaribrd_browser=firefox— Mozilla Firefox (nicht kompatibel mitbrd_mobile=1)
Wenn nicht angegeben, verwendet die API einen zufälligen Browser.
Example:
curl --proxy brd.superproxy.io:33335 \
--proxy-user "brd-customer-<customer-id>-zone-<zone-name>:<zone-password>" \
"https://www.google.com/search?q=best+gaming+laptops&brd_browser=chrome"Example (Kombination von Browser und Gerätetyp):
curl --proxy brd.superproxy.io:33335 \
--proxy-user "brd-customer-<customer-id>-zone-<zone-name>:<zone-password>" \
"https://www.google.com/search?q=best+smartphones&brd_browser=safari&brd_mobile=ios"Erhalten Sie Suchergebnisse in einem strukturierten Format mithilfe des Parameters brd_json:
- Options:
brd_json=1- Gibt Ergebnisse im geparsten JSON-Format zurückbrd_json=html- Gibt JSON mit einem zusätzlichen Feld"html"zurück, das rohes HTML enthält
Beispiel (JSON-Ausgabe):
curl --proxy brd.superproxy.io:33335 \
--proxy-user "brd-customer-<customer-id>-zone-<zone-name>:<zone-password>" \
"https://www.google.com/search?q=best+hotels+in+new+york&brd_json=1"Beispiel (JSON mit rohem HTML):
curl --proxy brd.superproxy.io:33335 \
--proxy-user "brd-customer-<customer-id>-zone-<zone-name>:<zone-password>" \
"https://www.google.com/search?q=top+restaurants+in+paris&brd_json=html"Erfahren Sie mehr in unserem SERP API Parsing Guide.
Verfeinern Sie Hotelsuchen mit diesen Parametern:
-
hotel_occupancy(Anzahl der Gäste)- Legt die Anzahl der Gäste fest (bis zu 4)
- Beispiele:
hotel_occupancy=1→ Für 1 Gasthotel_occupancy=2→ Für 2 Gäste (default)hotel_occupancy=4→ Für 4 Gäste
Example (Suche nach Hotels in New York für 4 Gäste):
curl --proxy brd.superproxy.io:33335 \ --proxy-user "brd-customer-<customer-id>-zone-<zone-name>:<zone-password>" \ "https://www.google.com/search?q=hotels+in+new+york&hotel_occupancy=4" -
hotel_dates(Check-in- & Check-out-Daten)- Filtert Ergebnisse für bestimmte Datumsbereiche
- Format: YYYY-MM-DD, YYYY-MM-DD
Example (Suche nach Hotels in Paris vom 1. Mai bis 3. Mai 2025):
curl --proxy brd.superproxy.io:33335 \ --proxy-user "brd-customer-<customer-id>-zone-<zone-name>:<zone-password>" \ "https://www.google.com/search?q=hotels+in+paris&hotel_dates=2025-05-01%2C2025-05-03"Combined Example:
curl --proxy brd.superproxy.io:33335 \ --proxy-user "brd-customer-<customer-id>-zone-<zone-name>:<zone-password>" \ "https://www.google.com/search?q=hotels+in+tokyo&hotel_occupancy=2&hotel_dates=2025-05-01%2C2025-05-03"
Senden Sie mehrere Suchanfragen gleichzeitig innerhalb desselben Peers und derselben Sitzung – ideal zum Vergleichen von Ergebnissen.
- Senden Sie eine POST-Anfrage mit einem
multi-Array, das Suchvariationen enthält - Erhalten Sie eine
response_idfür das spätere Abrufen der Ergebnisse - Rufen Sie Ergebnisse über die
response_idab, sobald die Verarbeitung abgeschlossen ist
Step 1: Send Parallel Requests
RESPONSE_ID=$(curl -i --silent --compressed \
"https://api.brightdata.com/serp/req?customer=<customer-id>&zone=<zone-name>" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer API_TOKEN" \
-d $'{
"country": "us",
"multi": [
{"query": {"q": "top+macbook+for+developers", "num": 20}},
{"query": {"q": "top+macbook+for+developers", "num": 100}}
]
}' | sed -En 's/^x-response-id: (.*)/\1/p' | tr -d '\r')
echo "Response ID: $RESPONSE_ID"Step 2: Fetch Results
curl -v --compressed \
"https://api.brightdata.com/serp/get_result?customer=<customer-id>&zone=<zone-name>&response_id=${RESPONSE_ID}" \
-H "Authorization: Bearer API_TOKEN"Sie können außerdem nach mehreren Keywords in einer Anfrage suchen:
{
"multi":[
{"query":{"q":"best+smartphones+2025"}},
{"query":{"q":"best+laptops+2025"}}
]
}Erfahren Sie mehr über asynchrone Anfragen hier.
Google fügt manchmal KI-generierte Zusammenfassungen (AI Overviews) oben in den Suchergebnissen ein. Verwenden Sie brd_ai_mode=1, um die Wahrscheinlichkeit zu erhöhen, diese KI-generierten Overviews zu sehen:
curl --proxy brd.superproxy.io:33335 \
--proxy-user "brd-customer-<customer-id>-zone-<zone-name>:<zone-password>" \
"https://www.google.com/search?q=how+does+caffeine+affect+sleep&brd_ai_mode=1"- Documentation: SERP API Docs
- SEO Use Cases: SEO Tracking and Insights
- Other Guides:
- Interesting Reads:
- Technical Support: Contact Us











