Tony Wang5 Min. LesezeitTripadvisor scrapen 2026 (API & Python)
Tripadvisor 2026 scrapen — DIY-Python, No-Code oder eine strukturierte API für Hotel-, Restaurant- und Attraktionssuche plus Reviews — mit den rechtlichen Grundlagen.
Der schnellste Weg, Tripadvisor 2026 zu scrapen, ist der Aufruf einer strukturierten API, die normalisiertes JSON zurückgibt — Hotel-, Restaurant- und Attraktionssuche, Ortsdetails und Reviews — statt Tripadvisors GraphQL-Endpoints zurückzuentwickeln und gegen dessen Anti-Bot-Stack zu kämpfen. Du kannst einen DIY-Scraper bauen, aber Tripadvisor ist gut geschützt, und die offizielle API lässt den Review-Text weg, den die meisten wollen. Dieser Guide behandelt alle drei Ansätze, was jeder liefert, wo jeder scheitert und die rechtlichen Grundlagen.
Warum Tripadvisor scrapen?
Tripadvisor ist eine der größten Reisedatenquellen, was es wertvoll macht für:
- Hotel- & Restaurant-Marktanalyse — verfolge Ratings, Rankings und Preise über ein Reiseziel hinweg.
- Review- & Sentiment-Analyse — quantifiziere, was Gäste loben und bemängeln.
- Wettbewerbsbeobachtung — vergleiche eine Unterkunft mit ihrem lokalen Rang und ihren Mitbewerbern.
- Reise-Content & -Produkte — treibe Recherche zu Reisezielen, Attraktionen und "Things to do" an.
Ist es legal, Tripadvisor zu scrapen?
Option 1: DIY in Python (und warum es scheitert)
Tripadvisor lädt Such- und Listing-Daten über GraphQL, daher entwickelt ein DIY-Scraper diese Calls zurück:
import httpx
# TripAdvisor's typeahead runs on a GraphQL endpoint keyed by a rotating query id
payload = [{"variables": {"request": {"query": "New York", "limit": 10, "locale": "en-US"}},
"query": "84b17ed122fbdbd4"}] # preRegisteredQueryId — changes over time
r = httpx.post("https://www.tripadvisor.com/data/graphql/ids", json=payload, http2=True,
headers={"Origin": "https://www.tripadvisor.com",
"Referer": "https://www.tripadvisor.com/Hotels",
"X-Requested-By": "<random-tracking-id>"}) # required, or you're blocked
Es funktioniert in der Demo und scheitert dann:
- DataDome + Cloudflare. Tripadvisor betreibt DataDome-Bot-Erkennung hinter einer Cloudflare-WAF mit TLS-Fingerprinting und JavaScript-Challenges; Datacenter-IPs ziehen CAPTCHAs und 403er nach sich, also brauchst du Residential-Proxys und eine niedrige Rate (etwa 10 Requests/Minute mit 3–7s Verzögerung).
- Rotierende GraphQL-Query-IDs. Die Daten liegen hinter
/data/graphql/ids-Calls, die über eine sich änderndepreRegisteredQueryIdadressiert werden, plus erforderlicheOrigin/Referer/X-Requested-By-Header — wenn die id rotiert, liefert dein Scraper keine Daten mehr. - Versteckte Web-Daten und driftende Selektoren. Hotel- und Review-Details sind als JSON in die Seite eingebettet (die
aggregateRating-Script-Blöcke), Reviews paginieren über-orN--URL-Offsets, und diedata-test-target-Hooks ändern sich ohne Vorwarnung. - Die offizielle API füllt die Lücke nicht. Tripadvisors Content-API gibt ~5.000 kostenlose Calls/Monat (Kreditkarte erforderlich), liefert aber Ratings und Links — nicht den vollständigen Review-Text — sodass der Content, den die Leute eigentlich wollen, weiterhin Scraping bedeutet.
Option 2: No-Code-Tools
Visuelle Extraktoren und "TripAdvisor reviews"-Actors aus Marktplätzen exportieren CSV/JSON und eignen sich für einmalige Abzüge, aber sie sind in einer In-Product-Pipeline mit vorhersagbaren Feldern unhandlich und scheitern am selben Anti-Bot-Wechsel.
Option 3: Eine strukturierte Tripadvisor-API
Für wiederholbare Workflows gibt eine TripAdvisor scraping API normalisiertes JSON zurück, ohne dass ein Browser läuft. Löse zuerst einen Standort auf:
curl "https://api.crawlora.net/api/v1/tripadvisor/autocomplete?q=New%20York" \
-H "x-api-key: $CRAWLORA_API_KEY"
Verkette dann autocomplete → search → reviews in Python:
import requests
h = {"x-api-key": "YOUR_API_KEY"}
base = "https://api.crawlora.net/api/v1/tripadvisor"
# 1) resolve a location to a geo_id
geo = requests.get(f"{base}/autocomplete", headers=h, params={"q": "New York"}).json()["data"]["results"][0]
geo_id = geo["id"]
# 2) search hotels (or restaurants / attractions) in that geo
hotels = requests.get(f"{base}/search", headers=h,
params={"geo_id": geo_id, "type": "hotel", "limit": 20}).json()["data"]["results"]
# 3) pull a place's reviews by its own id
place_id = hotels[0]["id"]
reviews = requests.get(f"{base}/reviews", headers=h,
params={"id": place_id, "page": 1, "language": "en"}).json()["data"]["reviews"]
Eine Reviews-Response ist normalisiertes JSON, das du direkt speichern kannst (Felder sind beispielhaft — prüfe die docs):
{
"code": 200,
"msg": "OK",
"data": {
"id": "113311",
"page": 1,
"language": "en",
"total": 1517,
"reviews": [
{
"id": "1060008752",
"title": "Outstanding weekend",
"text": "Excellent stay with attentive service.",
"author": "Jane D.",
"date": "May 2026",
"rating": 5,
"helpful_votes": 1,
"photos": ["https://dynamic-media-cdn.tripadvisor.com/media/photo.jpg"]
}
]
}
}
Suchergebnisse führen id, title, type, url, rating, review_count, rank_label, price_level, address, categories und booking_url. Nutze /tripadvisor/hotels für hotelspezifische Ergebnisse mit price/star_rating, /tripadvisor/place für vollständige Ortsdetails und /tripadvisor/enums für gültige type/sort-Werte. Reviews paginieren über page; übergib language und sort_by. Speichere eine Zeile pro Review und ziehe die Daten nach Zeitplan erneut.
Was du erfassen kannst
Wo die öffentlichen Seiten sie preisgeben: Standort-Autocomplete (Geo-IDs und übergeordnete Einheiten), Suchergebnisse für Hotels, Restaurants und Attraktionen (rating, review_count, rank_label, price_level oder price, categories, booking_url), Ortsdetails (address, images, rating, Review-Gesamtzahl) und Reviews (title, text, author, date, rating, helpful_votes, photos) — abgegrenzt nach Geo und Locale/Währung. Bleib bei öffentlichen, faktischen Feldern.
Einschränkungen und häufige Herausforderungen
- Kein einfacher offizieller Weg zum Review-Text. Die Content-API deckelt bei ~5.000 Calls/Monat (Karte erforderlich) und lässt den vollständigen Review-Text weg, und direktes Scraping zieht bei Skalierung DataDome-/Cloudflare-CAPTCHAs nach sich — eine strukturierte API absorbiert Proxys und Anti-Bot hinter einem einzigen Key.
- geo_id vs. place id. Standorte werden über eine
geo_id(aus dem Autocomplete) adressiert; einzelne Hotels, Restaurants und Attraktionen über ihre eigeneid— löse zuerst die Geo auf. - Reviews sind pro Locale und personenbezogene Daten. Reviews sind an eine Sprache/Locale gebunden, und Autorennamen plus Review-Text sind personenbezogen nach DSGVO/CCPA — erfasse öffentliche, faktische Felder mit einer Rechtsgrundlage.
- Rankings und Preise sind dynamisch. Rang-Labels und Übernachtungspreise verschieben sich, ziehe die Daten also nach Zeitplan erneut, statt einer einmaligen Momentaufnahme zu vertrauen.
Wo das eingesetzt wird
- Reise- & Gastgewerbe-Recherche — verfolge Hotels, Restaurants und Attraktionen über Reiseziele hinweg. Siehe den Use Case travel & hospitality research.
- Review- & Reputationsüberwachung — beobachte Ratings und Review-Sentiment für eine Unterkunft. Siehe review & reputation monitoring.
- Markt- & Wettbewerbsanalyse — vergleiche einen Anbieter mit seinem lokalen Rang und seinen Mitbewerbern.
Sources
Leg mit dem Erfassen los
Probier es zuerst kostenlos: Lass eine beliebige öffentliche URL durch den Free Web Scraper laufen oder prüfe mit dem Anti-Bot Checker, ob eine Seite Bots blockiert — ohne Anmeldung.
Teste die Such- und Reviews-Endpoints im Playground, prüfe das Schema in den API docs und sieh dir das Pricing an. Siehe auch how to scrape Airbnb für den Rest des Reise-Stacks, how to scrape Trustpilot reviews und how to scrape App Store reviews für weitere Review-Quellen, how to choose a web scraping API und is web scraping legal.
Häufig gestellte Fragen
Kann ich Tripadvisor scrapen, ohne blockiert zu werden?
Tripadvisor betreibt DataDome-Bot-Erkennung hinter einer Cloudflare-WAF mit TLS-Fingerprinting und JavaScript-Challenges, sodass Datacenter-IPs CAPTCHAs und 403er nach sich ziehen — DIY braucht Residential-Proxys und eine langsame Rate (etwa 10 Requests/Minute). Eine strukturierte API kümmert sich für öffentliche Such- und Review-Daten hinter einem einzigen Key um Proxys und Anti-Bot.
Hat Tripadvisor eine offizielle API?
Ja, aber sie ist begrenzt. Die Tripadvisor Content-API gibt rund 5.000 kostenlose Calls/Monat (eine Kreditkarte ist erforderlich) und liefert Ratings und Links — nicht den vollständigen Review-Text — sodass das Erfassen der tatsächlichen Review-Inhalte, die die Leute wollen, weiterhin Scraping bedeutet.
Wie komme ich an die Reviews eines Hotels oder Restaurants?
Löse den Standort mit /tripadvisor/autocomplete zu einer geo_id auf, durchsuche diese Geo mit /tripadvisor/search (type hotel, restaurant oder attraction), um die id eines Ortes zu erhalten, und rufe dann /tripadvisor/reviews mit dieser id auf. Reviews paginieren über page und akzeptieren language und sort_by.
Was ist der Unterschied zwischen einer geo_id und einer place id?
Eine geo_id identifiziert einen Standort (Stadt, Region) und kommt aus dem Autocomplete; eine place id identifiziert ein bestimmtes Hotel, Restaurant oder eine Attraktion und kommt aus den Suchergebnissen. Du löst zuerst die Geo auf und adressierst dann den Ort über seine eigene id.
Welche Tripadvisor-Daten kann ich erfassen?
Öffentliche Felder: Standort-Autocomplete, Suchergebnisse für Hotels/Restaurants/Attraktionen (rating, review_count, rank_label, Price-Level, categories, booking_url), Ortsdetails (address, images, rating) und Reviews (title, text, author, date, rating, helpful_votes, photos) — abgegrenzt nach Geo und Locale.
Sind Tripadvisor-Reviews personenbezogene Daten?
Ja. Autorennamen und Review-Text sind personenbezogene Daten nach DSGVO/CCPA — erfasse nur öffentliche, faktische Felder mit einer Rechtsgrundlage und veröffentliche nicht die Identitäten der Reviewer erneut.
Wie oft kann ich aktualisieren?
Rankings und Preise ändern sich, ziehe die Daten also nach Zeitplan innerhalb deines Plans und der Responsible-Use-Limits erneut, statt kontinuierlich abzufragen.