Airbnb hostet über in mehr als 220 Ländern – und bietet keinen öffentlichen API-Zugriff auf Marktdaten. Wenn du Preis-Intelligence, Wettbewerbs-Benchmarks oder Forschungsdatensätze brauchst, bleibt Scraping im Grunde die einzige Option.
Der Haken? Airbnb gehört zu den schwierigsten Websites, die man im modernen Web scrapen kann. Die Seite läuft mit einem eigenen WAF, unterstützt von Akamai Bot Manager, rendert alles clientseitig mit React und rotiert CSS-Klassennamen, als würde ein misstrauischer Schlüsseldienst ständig die Schlösser wechseln. Ich habe viel Zeit damit verbracht, verschiedene Ansätze für das Airbnb-Scraping zu testen – von schlanken HTTP-Bibliotheken über vollständige Browserautomatisierung bis hin zu No-Code-KI-Tools – und die Realität ist: Keine einzelne Methode funktioniert für jeden Anwendungsfall perfekt.
Dieser Leitfaden führt dich durch alle fünf praktikablen Ansätze, mit echtem Code, ehrlichen Abwägungen und praxisnahen Tipps, damit deine IP nicht ins Bodenlose gebannt wird. Egal, ob du Python-Entwickler, Datenanalyst oder Immobilieninvestor bist, der einfach nur eine Tabelle möchte – hier findest du einen Weg.
Warum Airbnb scrapen? Praxisnahe Anwendungsfälle
Niemand scrapt Airbnb aus Spaß daran, verschachteltes HTML zu parsen. Menschen haben konkrete Projekte und Geschäftsziele – hier sind die sechs häufigsten:
| Anwendungsfall | Was du scrapest | Wer das macht |
|---|---|---|
| Dynamische Preisstrategie | Nächtliche Wettbewerberpreise innerhalb eines bestimmten Radius | Hosts, Immobilienverwalter |
| Investitionsanalyse | Auslastungsindikatoren (Bewertungsfrequenz, KalenderverfĂĽgbarkeit), ADR, RevPAR | Immobilieninvestoren |
| Benchmarking von Reinigungsgebühren | Reinigungsgebühren über verschiedene Immobilientypen hinweg (Durchschnittsspanne von $81–$335 in großen US-Städten) | Hosts, Pricing-Berater |
| Sentiment-Analyse von Bewertungen | Gästebewertungen für NLP-/Sentiment-Bewertung | Datenwissenschaftler, Hospitality-Teams |
| Akademische Forschung | Datensätze auf Marktebene für Wohnungspolitik, Tourismus, Stadtökonomie | Forschende (48,7 % von 1.021 wissenschaftlichen Arbeiten zu Airbnb nutzten gescrapte Daten) |
| Wettbewerbsbeobachtung | Neue Inserate, Preisänderungen, Verfügbarkeit im Zeitverlauf | STR-Betreiber, Marktanalysten |
Für laufende Anwendungsfälle wie Preisüberwachung oder Wettbewerbsbeobachtung ist geplantes oder automatisiertes Scraping besonders wertvoll – du brauchst aktuelle Daten, keinen einmaligen Schnappschuss.
Der Markt für Kurzzeitvermietungen wächst schneller als klassische Hotels: Die STR-Nachfrage , während die Hotelnachfrage um 0,3 % zurückging. Wenn du in diesem Bereich unterwegs bist, sind Daten dein Vorteil.
Warum Airbnb so schwierig zu scrapen ist
Bevor du eine einzige Zeile Code schreibst, hilft es zu verstehen, warum Airbnb bei der Scraping-Schwierigkeit mit bewertet wird. Drei Probleme addieren sich hier.
Airbnbs Anti-Bot-Abwehr
Airbnb verwendet einen eigenen WAF in Kombination mit , einem Bot-Erkennungssystem für Unternehmen, das jede Anfrage gleichzeitig über mehrere Dimensionen bewertet. Das ist nicht nur Rate Limiting – das ist KI-gestütztes Fingerprinting.

Die Erkennungsstufe, nach Risikoniveau geordnet:
- TLS-Fingerprinting (HOCH): Die
requests-Bibliothek von Python hat einen einzigartigen TLS-Handshake-Fingerprint, der zu keinem echten Browser passt. Akamai analysiert Cipher Suites, Erweiterungen und die ALPN-Reihenfolge mit JA3-/JA4-Methoden. Standard-requestserreicht auf geschützten Seiten nur etwa gegenüber 92 % bei Bibliotheken, die Browser-TLS-Fingerprints vortäuschen. - JavaScript-Ausführung (HOCH): Akamai setzt clientseitige Skripte ein, die „Sensordaten“ sammeln – Geräteparameter, Hardware-Fähigkeiten, Betriebssystemdetails. Daraus wird das
_abck-Cookie erzeugt. Ohne AusfĂĽhrung dieses JavaScripts werden Anfragen blockiert. - Browser-Fingerprinting (HOCH): Canvas-, WebGL- und Schriftartenanalyse erkennen Automatisierungstools. Headless-Browser verraten sich durch
navigator.webdriver, fehlende Plugins und inkonsistente Hardwarewerte. - HTTP-Header-Analyse (HOCH): Fehlende
Sec-Fetch-*-Header sind auf Airbnb. - IP-Reputation (MITTEL): Rechenzentrums-IPs werden sofort blockiert. Residential Proxies sind in größerem Umfang Pflicht.
- Verhaltensanalyse (MITTEL): Zu regelmäßige Timing-Muster, keine Mausbewegung, kein Scrollen – alles eindeutige Hinweise.
Wenn du blockiert wirst, siehst du: 403 Forbidden (Fingerprint-Fehler), 429 Too Many Requests (Rate-Limit), 503 Service Unavailable (Akamai-Challenge-Seite) oder eine CAPTCHA-Seite.
Dynamische, stark JavaScript-basierte Seiten bei Airbnb
Ein einfaches requests.get() auf Airbnb liefert nur eine React-Hülle mit Platzhalter-HTML – keine eigentlichen Listungsdaten. Wie : „Einfache HTTP-Anfragen funktionieren schlicht nicht, und ohne passende Proxys und echtes JavaScript-Rendering scrapst du nicht Airbnb, sondern Platzhalter.“
Die tatsächlichen Daten werden clientseitig über interne GraphQL-API-Aufrufe geladen (/api/v3/StaysSearch für Suchergebnisse, /api/v3/PdpPlatformSections für Inseratsdetails). Das bedeutet: Für die meisten nützlichen Daten brauchst du entweder einen vollständigen Browser oder API-Intercepting.
Das DOM ändert sich ständig
Airbnb nutzt CSS-in-JS mit gehashten Klassennamen, die sich mit jedem Deployment ändern. Dokumentierte Beispiele sind _tyxjp1, lxq01kf, atm_mk_h2mmj6, t1jojoys und _8s3ctt. Wie erklärt: „Diese Klassen sind nicht dazu gedacht, stabil zu sein, und können sich jederzeit ändern, oft ohne sichtbare Änderungen an der Seite.“
Die Entwickler-Community hat diesen Schmerz ausführlich dokumentiert. , dass „CSS-Klassen sich ständig ändern, und sich darauf zu verlassen, ist der schnellste Weg, deinen Scraper zu zerstören.“ Ein erfahrener Entwickler in der DEV Community brachte es gut auf den Punkt: „Ein Scraper, der 50 % langsamer ist, aber nie kaputtgeht, ist unendlich wertvoller als ein schneller, der wöchentlich stirbt.“
Branchen-Schätzungen gehen davon aus, dass – wegen DOM-Verschiebungen, Fingerprinting-Updates oder Drosselung der Endpunkte.
Wähle deinen Ansatz: 5 Wege, Airbnb zu scrapen
Bevor es an Code geht, hier der Vergleich. Jeder Ansatz hat echte Vor- und Nachteile – es gibt keine universell „beste“ Methode.
| Ansatz | Einrichtungsaufwand | Geschwindigkeit | Robustheit gegen Bots | Wartung | Am besten geeignet fĂĽr |
|---|---|---|---|---|---|
Reines HTTP (requests / pyairbnb) | Gering | Schnell | Mittel (anfällig für API-Änderungen) | Mittel | Schnelle Recherche, kleine Datensätze |
| Browser-Automatisierung (Selenium) | Hoch | Langsam | Mittel | Hoch (DOM-Brüche) | Dynamische Inhalte, preisabhängig von Datum |
| Browser-Automatisierung (Playwright) | Mittel | Mittel | Mittel bis hoch | Mittel | Moderne Alternative zu Selenium |
| Scraping-API (ScrapingBee, Bright Data) | Gering | Schnell | Hoch (Proxy-Rotation integriert) | Gering | Scraping in groĂźem Umfang, Produktionseinsatz |
| No-Code (Thunderbit) | Minimal | Schnell | Hoch (KI passt sich Layout-Änderungen an) | Keine | Nicht-Entwickler, einmalige Analysen |
Der Rest dieses Artikels führt dich Schritt für Schritt durch die Python-Ansätze; am Ende gibt es einen No-Code-Abschnitt für alle, die den Code lieber ganz überspringen.
Schritt fĂĽr Schritt: Airbnb mit Python und Requests scrapen (HTTP-first)
Das ist die schlanke, schnelle Einstiegsoption – kein Browser nötig, keine Chromedriver-Probleme. Der Kompromiss: Es funktioniert für einige Daten, aber nicht für alle.
Python-Umgebung einrichten
Lege einen Projektordner an und richte eine virtuelle Umgebung ein:
1mkdir airbnb-scraper && cd airbnb-scraper
2python -m venv venv
3source venv/bin/activate # Windows: venv\Scripts\activate
4pip install requests beautifulsoup4 pandas pyairbnb
pyairbnb ist eine schlanke Bibliothek (, zuletzt veröffentlicht im Februar 2026), die Airbnbs interne StaysSearch-GraphQL-API abfängt. Sie scrapt überhaupt kein HTML, was sie robust gegenüber Änderungen an CSS-Klassen macht. Das Ein-Personen-Maintainer-Modell ist ein Risiko, aber die Bibliothek wird aktiv aktualisiert.
Option A: pyairbnb fĂĽr schnelle Suchergebnisse nutzen
Der schnellste Weg zu strukturierten Airbnb-Daten:
1import pyairbnb
2import pandas as pd
3# Nach Ort und Datum suchen
4results = pyairbnb.search_all(
5 query="Austin, TX",
6 checkin="2025-08-01",
7 checkout="2025-08-03",
8 adults=2,
9 currency="USD"
10)
11# In DataFrame umwandeln
12df = pd.DataFrame(results)
13print(df[['name', 'price', 'rating', 'reviewsCount', 'url']].head())
14df.to_csv("airbnb_austin.csv", index=False)
pyairbnb unterstĂĽtzt auĂźerdem get_details(), get_price(), get_reviews(), get_calendar() und get_listings_from_user(). Alle Funktionen akzeptieren einen Proxy-URL-Parameter fĂĽr die Rotation.
Option B: Manuelle HTTP-Anfragen mit BeautifulSoup
Wenn du nicht von einer Drittanbieter-Bibliothek abhängig sein willst, kannst du Anfragen direkt senden. Vorwarnung: Reines requests wird wegen TLS-Fingerprinting schnell blockiert. Der Einsatz von curl_cffi (das Browser-TLS-Fingerprints imitiert) verbessert die Erfolgsquote deutlich.
1from curl_cffi import requests as cffi_requests
2from bs4 import BeautifulSoup
3import json
4url = "https://www.airbnb.com/s/Austin--TX/homes?checkin=2025-08-01&checkout=2025-08-03&adults=2"
5headers = {
6 "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36",
7 "Accept-Language": "en-US,en;q=0.9",
8 "Sec-Fetch-Dest": "document",
9 "Sec-Fetch-Mode": "navigate",
10 "Sec-Fetch-Site": "none",
11 "Sec-Fetch-User": "?1",
12}
13response = cffi_requests.get(url, headers=headers, impersonate="chrome131")
14soup = BeautifulSoup(response.text, "html.parser")
Daten aus Schema.org-Mikrodaten extrahieren
Airbnb bindet schema.org-Mikrodaten direkt ins HTML ein – und diese semantischen Tags sind . Achte auf Container mit itemprop="itemListElement":
1listings = soup.find_all("div", itemprop="itemListElement")
2data = []
3for listing in listings:
4 name_tag = listing.find("meta", itemprop="name")
5 url_tag = listing.find("meta", itemprop="url")
6 position_tag = listing.find("meta", itemprop="position")
7 data.append({
8 "name": name_tag["content"] if name_tag else None,
9 "url": url_tag["content"] if url_tag else None,
10 "position": position_tag["content"] if position_tag else None,
11 })
12df = pd.DataFrame(data)
13df.to_csv("airbnb_listings.csv", index=False)
Die Einschränkung: schema.org-Tags liefern dir Inseratsnamen, URLs und Positionen – aber keine Preise, Bewertungen oder Annehmlichkeiten. Für reichhaltigere Daten brauchst du Browserautomatisierung oder API-Intercepting.
Schritt fĂĽr Schritt: Airbnb mit Python und Selenium oder Playwright scrapen
Wenn du dynamische Inhalte brauchst – preisabhängig von Datum, Annehmlichkeiten hinter „Mehr anzeigen“-Buttons, vollständige Bewertungstexte – ist Browserautomatisierung das richtige Werkzeug.
Wann du Browserautomatisierung einsetzen solltest
- Seiten, die eine Datumsauswahl benötigen, um echte Preise anzuzeigen
- Annehmlichkeiten und Bewertungen, die hinter interaktiven Elementen verborgen sind
- Alle Daten, die erst nach JavaScript-AusfĂĽhrung geladen werden
- Wenn du mit der Seite interagieren musst (scrollen, klicken)
Selenium vs. Playwright: Playwright hat sich durchgesetzt (meistens)
Playwright hat Selenium als bevorzugtes Tool für Browserautomatisierung überholt. Es ist schneller, hat integrierte Async-Unterstützung, installiert Browser-Binaries automatisch und kommt mit modernen Web-Apps besser zurecht. Slelniums anhaltendes – bei dem ChromeDriver hinter Chrome-Updates zurückbleibt – bleibt ein ständiger Nervfaktor.
Trotzdem hat Selenium ein größeres Ökosystem an Tutorials und StackOverflow-Antworten – nutze also das, womit du dich wohler fühlst.
Playwright einrichten
1pip install playwright playwright-stealth
2playwright install chromium
Zu Airbnb navigieren und Inserate extrahieren
1import asyncio
2from playwright.async_api import async_playwright
3from playwright_stealth import stealth_async
4import json
5async def scrape_airbnb():
6 async with async_playwright() as p:
7 browser = await p.chromium.launch(headless=False) # headless=True ist riskanter
8 context = await browser.new_context(
9 viewport={"width": 1920, "height": 1080},
10 user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"
11 )
12 page = await context.new_page()
13 await stealth_async(page)
14 url = "https://www.airbnb.com/s/Austin--TX/homes?checkin=2025-08-01&checkout=2025-08-03&adults=2"
15 await page.goto(url, wait_until="networkidle")
16 # Auf Karten mit Inseraten warten, mittels data-testid (stabiler als Klassen)
17 await page.wait_for_selector('[data-testid="card-container"]', timeout=15000)
18 # Inseratsdaten extrahieren
19 listings = await page.query_selector_all('[data-testid="card-container"]')
20 results = []
21 for listing in listings:
22 title_el = await listing.query_selector('[data-testid="listing-card-title"]')
23 subtitle_el = await listing.query_selector('[data-testid="listing-card-subtitle"]')
24 title = await title_el.inner_text() if title_el else None
25 subtitle = await subtitle_el.inner_text() if subtitle_el else None
26 results.append({"title": title, "subtitle": subtitle})
27 await browser.close()
28 return results
29data = asyncio.run(scrape_airbnb())
Die GraphQL-API abfangen (die zuverlässigste DIY-Methode)
Statt DOM-Elemente zu parsen, die ständig kaputtgehen, kannst du Airbnbs interne API-Aufrufe abfangen. Das liefert sauberes, strukturiertes JSON:
1api_responses = []
2async def handle_response(response):
3 if "StaysSearch" in response.url:
4 try:
5 data = await response.json()
6 api_responses.append(data)
7 except:
8 pass
9page.on("response", handle_response)
10await page.goto(url, wait_until="networkidle")
11# API-Antwort parsen
12if api_responses:
13 search_results = api_responses[0]["data"]["presentation"]["staysSearch"]["results"]["searchResults"]
14 for result in search_results:
15 listing = result.get("listing", {})
16 pricing = result.get("pricingQuote", {})
17 print(f"{listing.get('name')} — {pricing.get('price', {}).get('total')}")
Die StaysSearch-Antwort enthält id, name, roomTypeCategory, bedrooms, bathrooms, personCapacity, avgRating, reviewsCount, isSuperhost und vollständige Preisaufschlüsselungen. Das sind dieselben Daten, die Airbnbs Frontend zum Rendern der Seite nutzt.
Pagination handhaben
Airbnb zeigt ungefähr 18 Inserate pro Seite an und nutzt den URL-Parameter items_offset. Das Maximum liegt bei etwa 17 Seiten (~300 Inserate pro Suche).
1import time
2import random
3base_url = "https://www.airbnb.com/s/Austin--TX/homes?checkin=2025-08-01&checkout=2025-08-03&adults=2"
4all_results = []
5for page_num in range(17): # Max. ~17 Seiten
6 offset = page_num * 18
7 paginated_url = f"{base_url}&items_offset={offset}"
8 # ... wie oben navigieren und scrapen ...
9 time.sleep(random.uniform(3, 7)) # Zufällige Pause zwischen den Seiten
So scrapst du Airbnb-Preise mit Python (das Problem mit datumsabhängigen Preisen lösen)
Das ist der Abschnitt, den die meisten Tutorials überspringen – und genau der ist für die Preisanalyse am wichtigsten.
Warum Airbnb-Preise ohne Daten nicht angezeigt werden
In etwa 90 % der Fälle verlangt Airbnb Check-in-/Check-out-Daten, bevor ein echter Preis angezeigt wird. Ohne Daten bekommst du nur eine vage Spanne für den „Preis pro Nacht“ (oder manchmal gar keinen Preis). Wie : „Wenn ein Inserat keinen Preis anzeigt (zum Beispiel, wenn Airbnb möchte, dass du Daten oder Gästezahl anpasst), gibt die Funktion einfach None zurück.“
Gute Nachrichten: Seit April 2025 zeigt Airbnb standardmäßig für alle Gäste weltweit an. Zuvor gab es eine Option „Gesamtpreis anzeigen“ – fast 17 Millionen Gäste nutzten sie, bevor sie zum Standard wurde.
Daten ĂĽber URL-Parameter ĂĽbergeben
FĂĽge in deiner Such-URL immer checkin und checkout ein:
1https://www.airbnb.com/s/Austin--TX/homes?checkin=2025-08-01&checkout=2025-08-03&adults=2
Dadurch liefert Airbnb echte Nacht- und Gesamtpreise in der Seite und in den API-Antworten zurĂĽck.
Datumsbereiche fĂĽr die Preisanalyse durchlaufen
Für Hosts und Investoren, die Preisdaten über mehrere Saisons hinweg benötigen:
1from datetime import datetime, timedelta
2start_date = datetime(2025, 7, 1)
3end_date = datetime(2025, 12, 31)
4stay_length = 2 # Nächte
5current = start_date
6date_ranges = []
7while current + timedelta(days=stay_length) <= end_date:
8 checkin = current.strftime("%Y-%m-%d")
9 checkout = (current + timedelta(days=stay_length)).strftime("%Y-%m-%d")
10 date_ranges.append((checkin, checkout))
11 current += timedelta(days=7) # Wöchentliche Intervalle
12for checkin, checkout in date_ranges:
13 url = f"https://www.airbnb.com/s/Austin--TX/homes?checkin={checkin}&checkout={checkout}&adults=2"
14 # ... Preisdaten scrapen ...
15 time.sleep(random.uniform(5, 10)) # RĂĽcksichtsvoll bei der Taktung
Beim Parsen der Preise aus der GraphQL-API-Antwort solltest du nach dem pricingQuote-Objekt suchen. Es enthält price.total, price.priceItems (einzelne Positionen wie Reinigungsgebühr, Servicegebühr) und rate.amount (Nachtpreis).
So ĂĽberlebt dein Python-Airbnb-Scraper Website-Redesigns
Das ist der Wartungsabschnitt, den niemand schreiben will – aber er ist wahrscheinlich der wichtigste Teil jedes Airbnb-Scraping-Projekts.
Fragile vs. robuste Selektoren
| Selektor-Strategie | Bruchrisiko | Codeaufwand | Beispiel |
|---|---|---|---|
CSS-Klassennamen (z. B. .t1jojoys) | 🔴 Hoch — ändert sich häufig | Gering | soup.select('.t1jojoys') |
data-testid-Attribute | 🟡 Mittel — stabiler | Gering | soup.select('[data-testid="listing-card-title"]') |
| Schema.org-Mikrodaten in HTML | 🟢 Niedrig — struktureller Standard | Mittel | soup.find("meta", itemprop="name") |
| GraphQL-API-Intercepting | 🟢 Niedrig — strukturiertes JSON | Mittel | response.json()["data"]["presentation"] |
| KI-basierte Extraktion (Thunderbit) | 🟢 Keine — passt sich automatisch an | Keine | 2-Klick-UI, kein Code |
data-testid-Attribute verwenden
Aktuell dokumentierte data-testid-Werte auf Airbnb sind unter anderem card-container, listing-card-title, listing-card-subtitle und listing-card-name. Diese hängen mit Airbnbs internem Test-Framework zusammen, nicht mit der visuellen Gestaltung, daher ändern sie sich seltener als CSS-Klassen. Ganz ausgeschlossen ist eine Änderung aber nicht – nur eben seltener.
1# Robuster als Selektoren auf Klassenbasis
2title = await page.query_selector('[data-testid="listing-card-title"]')
Schema.org-Mikrodaten verwenden
Airbnb nutzt itemprop-Attribute direkt im HTML-Markup. Diese folgen Webstandards und ändern sich weit seltener als visuelle CSS-Klassen:
1# Alle Inserats-Elemente per schema.org-Markup extrahieren
2listings = soup.find_all("div", itemprop="itemListElement")
3for listing in listings:
4 name = listing.find("meta", itemprop="name")["content"]
5 url = listing.find("meta", itemprop="url")["content"]
Die GraphQL-API abfangen
Der zuverlässigste DIY-Ansatz. Airbnbs interne API liefert sauberes JSON, das für das Frontend strukturiert ist. Das Antwortformat ändert sich seltener als das DOM, weil auch das Frontend-Team darauf angewiesen ist.
Warum KI-basierte Extraktion Wartung komplett eliminiert
Auch die besten Selektorstrategien gehen irgendwann kaputt. data-testid-Werte werden umbenannt. API-Antwortstrukturen werden versioniert. Der einzige Ansatz, der Wartung wirklich eliminiert, ist einer, der die Seite bei jedem Lauf frisch mit KI liest – ganz ohne fest verdrahtete Selektoren. Mehr dazu im Thunderbit-Abschnitt unten.
So vermeidest du Blocks beim Airbnb-Scraping
Praxisnahe Tipps aus Erfahrung und Community-Konsens.
Proxys rotieren (Residential ist Pflicht)
Datacenter-IPs werden von Airbnb sofort blockiert. Residential Proxies sind bei jeder relevanten Größenordnung erforderlich. Die leistungsstärksten Anbieter mit Blick auf Preis und Performance:
| Anbieter | Preis (pro GB) | Erfolgsquote | Hinweise |
|---|---|---|---|
| Decodo (frĂĽher Smartproxy) | ca. $2,20/GB bei 100 GB | 99,68 % | Schnellste gemessene Antwort (0,54 s) |
| Bright Data | ca. $5,04/GB bei 100 GB | 99 %+ | Größter Pool, die meisten Funktionen |
| Oxylabs | ca. $4/GB bei 100 GB | 99 %+ | Stark fĂĽr E-Commerce |
Wichtige Erkenntnis zur Rotation von einem erfahrenen Entwickler: „Bei jeder Anfrage die IP zu rotieren ist eigentlich ein Warnsignal. Echte Nutzer behalten für eine Session dieselbe IP.“ Empfohlen werden Sticky Sessions von 5–10 Minuten, mit Rotation alle 20–30 Anfragen.
1proxies = {
2 "http": "http://user:pass@residential-proxy:port",
3 "https": "http://user:pass@residential-proxy:port",
4}
5response = cffi_requests.get(url, headers=headers, proxies=proxies, impersonate="chrome131")
Deine Anfragen drosseln
Community-Konsens zu sicheren Grenzen:
- Max. Seiten pro Stunde: ≤100 (~1,6/Min.)
- Pause zwischen Anfragen: 3–10 Sekunden (zufällig, idealerweise mit Gauß-Verteilung)
- Session-Pausen: Alle 20 Anfragen eine Pause von 30–60 Sekunden
- Optimales Scraping-Zeitfenster: Nebenzeiten (~2 Uhr morgens Ortszeit)
- Bei 429-Fehlern: Exponentielles Backoff mit Jitter
1import random
2import time
3delay = random.gauss(5, 1.5) # Mittelwert 5 Sekunden, Standardabweichung 1,5
4delay = max(2, min(delay, 10)) # Auf 2–10 Sekunden begrenzen
5time.sleep(delay)
Vollständige, konsistente Header verwenden
Fehlende Sec-Fetch-*-Header sind . Jeder Header muss intern konsistent sein – wenn dein User-Agent Chrome 131 unter Windows behauptet, müssen alle anderen Header zu dieser Identität passen.
1headers = {
2 "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36",
3 "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
4 "Accept-Language": "en-US,en;q=0.9",
5 "Accept-Encoding": "gzip, deflate, br",
6 "Sec-Fetch-Dest": "document",
7 "Sec-Fetch-Mode": "navigate",
8 "Sec-Fetch-Site": "none",
9 "Sec-Fetch-User": "?1",
10 "Sec-CH-UA": '"Google Chrome";v="131", "Chromium";v="131", "Not_A Brand";v="24"',
11 "Sec-CH-UA-Platform": '"Windows"',
12}
Headless-Browser mit Vorsicht verwenden
Bei Playwright patcht das Paket playwright-stealth etwa 17 Umgehungsmodule (navigator.webdriver, Plugins, Sprachen, WebGL). Moderne Anti-Bot-Systeme prüfen jedoch mehr als 40 Eigenschaften, während nur rund 12 gepatcht werden. Der Betrieb im Nicht-Headless-Modus (headless=False) ist sicherer, aber langsamer.
Bei Selenium patcht undetected-chromedriver das ChromeDriver-Binary, um Automatisierungsindikatoren zu entfernen, aber der Headless-Modus bleibt instabil.
FĂĽr groĂźe Mengen eine Scraping-API in Betracht ziehen
Wenn du Tausende von Seiten scrapen willst, übernimmt eine Scraping-API Proxy-Rotation, CAPTCHA-Lösung und JavaScript-Rendering für dich. In einem erreichte Bright Data 99 % Erfolgsquote mit 48 Feldern pro Inserat. Der Nachteil sind die Kosten – der Stealth-Proxy-Modus von ScrapingBee kostet , sodass ein Tarif für 49 $/Monat nur etwa 3.333 Stealth-Anfragen ermöglicht.
Airbnb ohne Python scrapen: Die No-Code-Alternative mit Thunderbit
Nicht jeder, der Airbnb scrapt, ist Entwickler. Hosts wollen Preisvergleiche. Investoren wollen Marktdaten. Analysten wollen eine Tabelle. Wenn du die Python-Abschnitte gelesen hast und gedacht hast: „Das ist mehr Wartung, als ich mir vorgenommen habe“, dann ist dieser Abschnitt für dich.
Wie Thunderbit Airbnb in wenigen Klicks scrapt
ist ein KI-Web-Scraper, der als läuft. So funktioniert der Ablauf:
- Erweiterung installieren aus dem Chrome Web Store
- Zu einer Airbnb-Suchergebnisseite navigieren – füge Daten in die URL ein, damit die Preise korrekt sind (z. B.
?checkin=2025-08-01&checkout=2025-08-03) - Auf „KI-Felder vorschlagen“ klicken – Thunderbit scannt die Seite und erkennt automatisch Spalten wie Inseratsname, Preis, Bewertung, Standort und URL
- Auf „Scrapen“ klicken – die Daten werden in einer strukturierten Tabelle ausgegeben
- „Unterseiten scrapen“ verwenden, um jede Inseratsdetailseite zu besuchen und Annehmlichkeiten, Bewertungen, Host-Infos und vollständige Preisaufschlüsselungen zu extrahieren – ganz ohne zusätzliche Konfiguration
- Exportieren nach Google Sheets, Excel, Airtable oder Notion
Die Unterseiten-Funktion ist hier besonders wichtig. Bei den Python-Ansätzen bedeutet das Scrapen von Detailseiten, dass du separate Parsing-Logik schreiben, Pagination innerhalb der Bewertungen behandeln und parallele Anfragen verwalten musst. Mit Thunderbit ist das ein Klick.
Warum Thunderbit die drei größten Airbnb-Scraping-Probleme löst
Die drei Probleme, die ich oben beschrieben habe – Anti-Bot-Abwehr, JavaScript-Rendering und DOM-Brüche – sind genau das, was Python-Scraper wartungsintensiv macht. Thunderbit adressiert alle drei:
- Keine IP-Blockierungsprobleme: Der Cloud-Scraping-Modus von Thunderbit ĂĽbernimmt die Proxy-Rotation intern
- Keine Selektor-Brüche: Die KI liest die Seite bei jedem Lauf frisch – keine CSS-Selektoren, die gepflegt werden müssen, kein Code-Update bei Airbnb-Redesigns
- Keine Einrichtungsprobleme: Keine Selenium-Driver, keine Python-Umgebung, keine Abhängigkeitskonflikte
- Geplantes Scraping: Beschreibe das Zeitintervall in natürlicher Sprache für laufende Preisüberwachung – ideal für dynamische Preisgestaltung und Wettbewerbsbeobachtung
Wann Python und wann Thunderbit?
Das ist kein Entweder-oder – es hängt davon ab, was du brauchst:
| Bedarf | Python | Thunderbit |
|---|---|---|
| Vollständige Kontrolle über die Scraping-Logik | ✅ Ja | ❌ Nein |
| Funktioniert ohne Programmierkenntnisse | ❌ Nein | ✅ Ja |
| Verarbeitet DOM-Änderungen automatisch | ❌ Nein | ✅ Ja (KI-basiert) |
| Unterseiten-Scraping (Detailseiten) | Komplexes Setup | 1 Klick |
| Geplantes/wiederkehrendes Scraping | Eigener Cron-Job | Integrierter Planer |
| Export nach Sheets/Excel/Airtable | Manueller Code | Integriert |
| Integration in Datenpipelines | ✅ Ja | Eingeschränkt |
| Kosten bei groĂźem Umfang (10.000+ Seiten) | Server- + Proxy-Kosten | Thunderbit-Preise |
Wenn du Kontrolle auf Code-Ebene, eigene Logik oder die Integration in eine bestehende Datenpipeline brauchst, nimm Python. Wenn du die Daten schnell und ohne Wartungsaufwand brauchst, ist Thunderbit die pragmatische Wahl.
Rechtliche und ethische Hinweise zum Airbnb-Scraping
Kurz und praxisnah – ich bin kein Anwalt, und das ist keine Rechtsberatung.
Was das Gesetz grob sagt:
- Das Urteil stellte fest, dass das Scrapen öffentlich zugänglicher Daten von Websites ohne Authentifizierung nicht gegen den CFAA verstößt
- (Januar 2024): Ein Richter entschied, dass Nutzungsbedingungen Scraper im ausgeloggten Zustand nicht binden
- Der Fall (2025) führt eine neue Theorie ein, wonach das Umgehen von CAPTCHAs und Rate Limits gegen DMCA-Anti-Umgehungsregelungen verstoßen könnte – das ist noch nicht getestet, aber es lohnt sich, das im Blick zu behalten
Was Airbnb sagt: Die verbieten automatisierte Datenerfassung ausdrücklich. Allerdings hat Airbnb noch nie öffentlich gegen einen Scraper geklagt. ist seit über 11 Jahren ohne rechtliche Schritte aktiv, obwohl Airbnb es als „Müll“ bezeichnet.
Praktische Leitlinien:
- Nur öffentlich verfügbare Daten scrapen (Login-Schranken nicht umgehen)
robots.txt-Hinweise respektieren- Server nicht mit aggressiven Anfragelasten ĂĽberfordern
- Personendaten unter GDPR/CCPA sorgfältig behandeln
- Für kommerzielle Anwendungsfälle Rechtsberatung einholen
Fazit und wichtigste Erkenntnisse
Airbnb-Scraping reicht von „schnell und schmutzig“ bis „produktionstauglich“. Die wichtigsten Erkenntnisse:
- Ăśbergib immer Daten in der URL (
checkin- undcheckout-Parameter) – ohne sie sind Preisdaten wertlos - Verlass dich nicht auf CSS-Klassennamen. Nutze stattdessen
data-testid-Attribute, schema.org-Mikrodaten oder API-Intercepting per GraphQL - Residential Proxies sind im groĂźen Umfang Pflicht. Datacenter-IPs werden sofort blockiert
- Drossele Anfragen – zufällige Pausen von 3–10 Sekunden, Sticky Sessions und exponentielles Backoff bei Fehlern
- Für Scraping ohne Wartungsaufwand eliminieren KI-basierte Tools wie Selektorbrüche komplett – genau das Problem, das Python-Scraper teuer in der Pflege macht
- Wähle dein Werkzeug passend zum Projekt. Schnelle Recherche?
pyairbnb. Dynamische Preisanalyse? Playwright mit API-Intercepting. Laufende Ăśberwachung ohne Code? Thunderbit. Produktion im groĂźen MaĂźstab? Eine Scraping-API.
Wenn du den No-Code-Weg ausprobieren möchtest, bietet – du kannst ihn in etwa zwei Minuten auf ein paar Airbnb-Suchergebnisseiten testen. Für den Python-Ansatz lassen sich alle Code-Muster in diesem Artikel direkt auf deinen konkreten Anwendungsfall anpassen.
Weitere Informationen zu Web-Scraping-Ansätzen und Tools findest du in unseren Leitfäden zu , und . Du kannst dir auch Tutorials auf dem ansehen.
FAQs
Kann Airbnb dich fĂĽrs Scraping blockieren?
Ja. Airbnb nutzt Akamai Bot Manager mit TLS-Fingerprinting, JavaScript-Challenges, Browser-Fingerprinting und IP-Reputationsbewertung. Wenn du erkannt wirst, bekommst du 403-, 429- oder CAPTCHA-Antworten. Proxy-Rotation, realistische Header und das Drosseln von Anfragen senken das Risiko, aber es gibt bei hohem Volumen keine garantierte Methode, Erkennung zu vermeiden.
Ist es legal, Airbnb zu scrapen?
Das Scrapen öffentlich verfügbarer Daten ist nach US-Rechtsprechung grundsätzlich zulässig (hiQ v. LinkedIn, Meta v. Bright Data), aber Airbnbs Nutzungsbedingungen verbieten es ausdrücklich. Die Rechtslage variiert je nach Jurisdiktion, und die aufkommende DMCA-Anti-Umgehungs-Theorie (Reddit v. Perplexity) könnte Scraper betreffen, die Anti-Bot-Maßnahmen umgehen. Für kommerzielle Nutzung solltest du Rechtsberatung einholen.
Welche Daten kann man von Airbnb scrapen?
Aus Suchergebnissen: Inseratsname, Preis (mit Daten), Bewertung, Anzahl der Bewertungen, Standort, Immobilientyp und URL. Aus Detailseiten: vollständige Beschreibung, Annehmlichkeiten, Host-Infos, alle Bewertungen, Fotos, Kalenderverfügbarkeit, Reinigungsgebühren und Preisaufschlüsselungen. Die Tiefe hängt davon ab, ob du nur Suchseiten scrapest oder auch einzelne Inseratsseiten besuchst.
Brauche ich Proxys, um Airbnb mit Python zu scrapen?
Für ein paar Seiten kommst du eventuell ohne Proxys aus. Für alles jenseits von 20–30 Anfragen wird eine Residential-Proxy-Rotation dringend empfohlen. Datacenter-IPs werden sofort blockiert. Der Community-Konsens empfiehlt maximal etwa 100 Seiten pro Stunde von einer einzelnen IP mit zufälligen Pausen von 3–10 Sekunden zwischen den Anfragen.
Was ist der einfachste Weg, Airbnb ohne Code zu scrapen?
ermöglicht es dir, Airbnb-Suchergebnisse und Inserats-Detailseiten mit KI-gestützter Felderkennung zu scrapen – keine Selektoren, die konfiguriert werden müssen, kein Code zum Schreiben. Sie unterstützt das Scraping von Unterseiten (für Annehmlichkeiten, Bewertungen und Host-Infos), exportiert nach Google Sheets, Excel, Airtable oder Notion und bietet geplantes Scraping für die laufende Preisüberwachung an.
Mehr erfahren
