- Kostenloser Google Maps Scraper
- Häufige Scraping-Herausforderungen
- Lösung: Bright Data Google Maps Scraper API
Verwenden Sie diesen kostenlosen Scraper, um Unternehmensbewertungen aus Google Maps zu extrahieren. Sie können in nur wenigen Schritten Details zu Rezensenten, Bewertungen, Bewertungstext, Fotos und mehr abrufen.
Bevor Sie loslegen, stellen Sie sicher, dass Sie diese Voraussetzungen installiert haben:
- Python 3.9+
- Playwright (für Browser-Automatisierung)
Folgen Sie diesen Schritten, um alles einzurichten:
-
Klonen Sie das Repository auf Ihren lokalen Rechner
-
Navigieren Sie in das Verzeichnis
free-scraper -
Installieren Sie die erforderlichen Abhängigkeiten:
pip install playwright playwright install
Gehen wir Schritt für Schritt durch, wie Sie den Scraper verwenden:
-
Öffnen Sie
main.pyund fügen Sie Ihre Ziel-Google-Maps-URLs hinzu:urls = [ "https://www.google.com/maps/place/Joe's+Pizza+Broadway/@40.7546835,-73.989604,17z/data=!3m1!5s0x89c259ab3e91ed73:0x4074c4cfa25e210b!4m8!3m7!1s0x89c259ab3c1ef289:0x3b67a41175949f55!8m2!3d40.7546795!4d-73.9870291!9m1!1b1!16s%2Fg%2F11bw4ws2mt?entry=ttu", "https://www.google.com/maps/place/Googleplex/@37.4220583,-122.0878991,17z/data=!4m8!3m7!1s0x808fba02425dad8f:0x6c296c66619367e0!8m2!3d37.4220541!4d-122.0853242!9m1!1b1!16zL20vMDNiYnkx?hl=en&entry=ttu", # Add as many URLs as you need ]
-
Führen Sie das Skript aus mit:
python main.py
Der Scraper speichert die Ergebnisse in free_scraper_output.json und enthält:
{
"reviewer_name": "Jacqueline",
"reviewer_link": "https://www.google.com/maps/contrib/108281841745817069467/reviews?hl=en-GB",
"reviewer_image": "https://lh3.googleusercontent.com/a-/ALV-UjUzl62rTNZOxsKGxvlnjM3leUg7DZostYzDJvG_8DUSNEtC7p-X=w36-h36-p-rp-mo-ba4-br100",
"rating": 5,
"date": "a week ago",
"text": "Went for lunch on a Tuesday at around 12:45pm. As usual, there was a line, but it moved really quickly and I was able to get my pizza 10 minutes later. Don't let the line deter you from trying Joe's! The pizza is great as always and the staff are nice. Never disappointed. I tried the caprese pizza and it was great!\n\nThere are a lot of people inside and outside so it can get hectic, but turnover for seats is quite quick and I got a seat on the bench outside almost right away.",
"photos": [
"https://lh5.googleusercontent.com/p/AF1QipMChGwUdQgWF9NAqdvss36KeuBZw_DAiuZy5yJj=w300-h225-p-k-no",
"https://lh5.googleusercontent.com/p/AF1QipNvachPq2HyJU0_3hs0DsRDRChaHZrQDDKOc3hz=w300-h225-p-k-no"
],
"likes_count": "1"
}Jeder Bewertungseintrag enthält:
- Rezensenten-Details: Name, Profil-Link und Avatarbild
- Bewertungsinhalt: Sternebewertung, Veröffentlichungsdatum und vollständiger Bewertungstext
- Medien: URLs aller angehängten Fotos
- Engagement: Anzahl der Likes, die die Bewertung erhalten hat
Das Scraping von Daten aus Google Maps kann ziemlich herausfordernd sein. Hier sind einige häufige Probleme, denen Sie begegnen können:
- Dynamisches Laden von Inhalten: Google Maps verwendet einen Mechanismus zum dynamischen Laden, bei dem Bewertungen über XHR/API-Anfragen abgerufen werden, während der Nutzer scrollt. Ohne angemessene Behandlung dieser dynamischen Anfragen und ohne darauf zu warten, dass Inhalte geladen werden, erfassen Scraper möglicherweise nur unvollständige Daten.
- Änderungen der DOM-Struktur: Google aktualisiert häufig die DOM-Struktur, Klassennamen und Datenattribute. Dies erfordert eine regelmäßige Wartung der Scraping-Logik, um sich an strukturelle Änderungen anzupassen.
- Ratenbegrenzung und Erkennung: Scraping von Google Maps kann Anti-Bot-Abwehrmaßnahmen auslösen, was zu Ratenbegrenzung oder IP-Sperren führen kann.
Wenn Sie eine zuverlässige, groß angelegte Datenextraktion benötigen, verwenden Sie die Bright Data Google Maps Scraper API. Darum funktioniert sie besser:
- Es ist kein Proxy-Management erforderlich
- Scraping von jedem Standort weltweit
- Zugriff auf 72M+ echte IPs in 195 Ländern
- Mehrere Optionen für die Datenbereitstellung (S3, Cloud Storage usw.)
- DSGVO- und CCPA-konform
- 24/7 technischer Support
Außerdem erhalten Sie 20 kostenlose API-Aufrufe, um es zu testen.
Sie können detaillierte Google-Maps-Bewertungen sammeln, indem Sie einfach eine URL bereitstellen.
Eine detaillierte Anleitung zum Einrichten der Google Maps Scraper API finden Sie in unserem Step-by-Step Setup Guide.
Wichtige Eingabeparameter:
| Parameter | Typ | Beschreibung | Erforderlich |
|---|---|---|---|
url |
string | Google Maps business URL | Ja |
days_limit |
number | Anzahl der Tage, aus denen Bewertungen abgerufen werden | Nein |
Beispiel-Ausgabedaten:
{
"url": "https://www.google.com/maps/place/Apple+Apple+Park+Visitor+Center/@37.3327772,-122.0079593,17z/data=!4m18!1m9!3m8!1s0x808fb5c5d7e7a3d1:0x1741de234d732f80!2sApple+Apple+Park+Visitor+Center!8m2!3d37.332773!4d-122.0053844!9m1!1b1!16s%2Fg%2F11rjtz4vtg!3m7!1s0x808fb5c5d7e7a3d1:0x1741de234d732f80!8m2!3d37.332773!4d-122.0053844!9m1!1b1!16s%2Fg%2F11rjtz4vtg?entry=ttu",
"place_id": "ChIJ0aPn18W1j4ARgC9zTSPeQRc",
"place_name": "Apple Apple Park Visitor Center",
"country": "US",
"address": "10600 N Tantau Ave, Cupertino, CA 95014",
"review_id": "ChdDSUhNMG9nS0VJQ0FnSUMzcDdqMHJRRRAB",
"reviewer_name": "Krzysztof Wojtczak",
"reviews_by_reviewer": 32,
"photos_by_reviewer": "12",
"reviewer_url": "https://www.google.com/maps/contrib/110797405132582450368/reviews?hl=en",
"local_guide": true,
"review_rating": 5,
"review": "Fajnie można spędzić czas, czilując na tarasie z kawką 🤙",
"review_date": "2024-11-09T22:18:01.713Z",
"number_of_likes": 0,
"response_of_owner": null,
"response_date": null,
"photos": [
"https://lh5.googleusercontent.com/p/AF1QipOtSDFfVpLL5GopXJzoFbTapha0G91nmEx5aSus",
"https://lh5.googleusercontent.com/p/AF1QipPcr5_TU6MWhAu1_K54DbxywZ4O88Q_qT7NSnhv",
"https://lh5.googleusercontent.com/p/AF1QipNLM5jHD0iDozGHsax9ydGAWUI_pn_fujQ3Q4Wr",
"https://lh5.googleusercontent.com/p/AF1QipPcKPwXyHDawuClpTpfV3zE7vMFO0UabmdjX9IG"
],
"timestamp": "2024-11-10T07:37:58.326Z",
"input": {
"url": "https://www.google.com/maps/place/Apple+Apple+Park+Visitor+Center/@37.3327772,-122.0079593,17z/data=!4m18!1m9!3m8!1s0x808fb5c5d7e7a3d1:0x1741de234d732f80!2sApple+Apple+Park+Visitor+Center!8m2!3d37.332773!4d-122.0053844!9m1!1b1!16s%2Fg%2F11rjtz4vtg!3m7!1s0x808fb5c5d7e7a3d1:0x1741de234d732f80!8m2!3d37.332773!4d-122.0053844!9m1!1b1!16s%2Fg%2F11rjtz4vtg?entry=ttu",
"days_limit": 30
}
}Sie können die vollständige Ausgabe anzeigen, indem Sie diese Beispiel-JSON-Datei herunterladen.
Codebeispiel:
Hier ist ein Python-Skript, um Google-Maps-Bewertungen zu sammeln und die Ergebnisse in einer JSON-Datei zu speichern:
import requests
import json
import time
class BrightData:
def __init__(self, api_token):
self.api_token = api_token
self.headers = {
"Authorization": f"Bearer {api_token}",
"Content-Type": "application/json",
}
def collect_reviews(self, urls_data):
"""
Collect Google Maps reviews using BrightData API
"""
# 1. Trigger data collection
print("Starting data collection...")
trigger_response = self._trigger_collection(urls_data)
snapshot_id = trigger_response.get("snapshot_id")
print(f"Snapshot ID: {snapshot_id}")
# 2. Wait for data to be ready
print("Waiting for data...")
while True:
status = self._check_status(snapshot_id)
print(f"Status: {status}")
if status == "ready":
# Check if data is actually available
data = self._get_data(snapshot_id)
if data and len(data) > 0:
break
time.sleep(10) # Wait 10 seconds before next check
# 3. Get and save the data
print("Saving data...")
filename = f"api_scraper_output.json"
with open(filename, "w", encoding="utf-8") as f:
json.dump(data, f, indent=2, ensure_ascii=False)
print(f"✓ Data saved to {filename}")
print(f"✓ Collected {len(data)} reviews")
return data
def _trigger_collection(self, urls_data):
"""Trigger data collection"""
response = requests.post(
"https://api.brightdata.com/datasets/v3/trigger",
headers=self.headers,
params={"dataset_id": "gd_luzfs1dn2oa0teb81",
"include_errors": "true"},
json=urls_data,
)
return response.json()
def _check_status(self, snapshot_id):
"""Check collection status"""
response = requests.get(
f"https://api.brightdata.com/datasets/v3/progress/{snapshot_id}",
headers=self.headers,
)
return response.json().get("status")
def _get_data(self, snapshot_id):
"""Get collected data"""
response = requests.get(
f"https://api.brightdata.com/datasets/v3/snapshot/{snapshot_id}",
headers=self.headers,
params={"format": "json"},
)
return response.json()
if __name__ == "__main__":
# Initialize with your API token
brightdata = BrightData("<YOUR_API_TOKEN>")
# Define URLs to collect reviews from
urls_to_collect = [
{
"url": "https://www.google.com/maps/place/Apple+Apple+Park+Visitor+Center/@37.3327772,-122.0079593,17z/data=!4m18!1m9!3m8!1s0x808fb5c5d7e7a3d1:0x1741de234d732f80!2sApple+Apple+Park+Visitor+Center!8m2!3d37.332773!4d-122.0053844!9m1!1b1!16s%2Fg%2F11rjtz4vtg!3m7!1s0x808fb5c5d7e7a3d1:0x1741de234d732f80!8m2!3d37.332773!4d-122.0053844!9m1!1b1!16s%2Fg%2F11rjtz4vtg?entry=ttu",
"days_limit": 30,
},
{
"url": "https://www.google.com/maps/place/Joe's+Pizza+Broadway/@40.7546835,-73.989604,17z/data=!3m1!5s0x89c259ab3e91ed73:0x4074c4cfa25e210b!4m8!3m7!1s0x89c259ab3c1ef289:0x3b67a41175949f55!8m2!3d40.7546795!4d-73.9870291!9m1!1b1!16s%2Fg%2F11bw4ws2mt?entry=ttu",
"days_limit": 25,
},
]
# Collect reviews
reviews = brightdata.collect_reviews(urls_to_collect)So funktioniert der Code:
- API-Token erforderlich: Zuerst benötigen Sie ein API-Token. Falls Sie noch keines haben, folgen Sie unserer Google Maps Scraper API setup guide.
- Datenerfassung starten: Übergeben Sie Ihr API-Token an den Code, und er startet die Datenerfassung mit Ihren angegebenen Parametern. Dies gibt eine
snapshot_idzurück, die Sie verwenden, um Ihre Anfrage zu verfolgen. - Auf Ergebnisse warten: Die Datenerfassung dauert einige Minuten. Während dieser Zeit prüft unser Code fortlaufend den Status der
snapshot_id:- Status "running" = Daten werden noch gesammelt
- Status "ready" = Datenerfassung ist abgeschlossen und in Ihrer JSON-Datei gespeichert
- Zusätzliche Parameter: Sie können Ihre Datenerfassung anpassen, indem Sie der Funktion
_trigger_collectionweitere Parameter hinzufügen. Sehen Sie sich den nächsten Abschnitt an, um zu erfahren, welche Parameter verfügbar sind, und um mehr über verschiedene Methoden der Datenbereitstellung zu lernen.
Verwenden Sie die folgenden API-Parameter, um Ihre Datenerfassung anzupassen:
| Parameter | Typ | Beschreibung | Beispiel |
|---|---|---|---|
limit |
integer |
Begrenzen Sie die Anzahl der zurückgegebenen Ergebnisse für jede Eingabe. | limit=10 |
include_errors |
boolean |
Fügen Sie zur Fehleranalyse einen Fehlerbericht in der Ausgabe hinzu. | include_errors=true |
notify |
url |
URL, an die eine Benachrichtigung gesendet wird, sobald die Erfassung abgeschlossen ist. | notify=https://notify-me.com/ |
format |
enum |
Format für die Datenbereitstellung. Unterstützte Formate: JSON, NDJSON, JSONL, CSV. | format=json |
💡Zusätzliche Bereitstellungsmethoden: Sie können wählen, die Daten per webhook oder über die API bereitzustellen.