Airbnb, 220’den fazla ülkede barındırıyor — ancak pazar verileri için herkese açık bir API sunmuyor. Fiyatlandırma içgörüsü, rakip kıyaslaması ya da araştırma veri setleri istiyorsanız, veri çekme neredeyse tek seçenek.
Peki zor olan ne? Airbnb, modern web’de veri çekmesi en güç sitelerden biri. Akamai Bot Manager destekli özel bir WAF kullanıyor, her şeyi React ile istemci tarafında render ediyor ve CSS sınıf adlarını, tedirgin bir kilit ustasının anahtar değiştirmesi gibi sürekli yeniliyor. Airbnb veri çekmek için farklı yaklaşımları test etmeye epey zaman harcadım — hafif HTTP kütüphanelerinden tam tarayıcı otomasyonuna ve kodsuz AI araçlarına kadar — ve açık konuşayım: tek bir yöntem her kullanım senaryosunda kusursuz çalışmıyor.
Bu rehber, gerçek kodlarla, dürüst artı-eksi değerlendirmeleriyle ve IP’nizin tamamen banlanmamasına yardımcı olacak pratik ipuçlarıyla birlikte uygulanabilir beş yaklaşımın hepsini ele alıyor. İster Python geliştiricisi, ister veri analisti, ister sadece bir tablo isteyen bir gayrimenkul yatırımcısı olun, size uygun bir yol var.
Neden Airbnb Verisi Çekilir? Gerçek Dünya Kullanım Senaryoları
Kimse iç içe geçmiş HTML çözmenin heyecanı için Airbnb verisi çekmez. İnsanların belirli projeleri ve iş hedefleri var — en yaygın altı kullanım senaryosu şöyle:
| Kullanım Senaryosu | Neyi Çekiyorsunuz | Bunu Kim Yapar |
|---|---|---|
| Dinamik fiyatlandırma stratejisi | Belirli bir yarıçap içindeki rakip gecelik fiyatları | Ev sahipleri, mülk yöneticileri |
| Yatırım analizi | Doluluk göstergeleri (yorum sıklığı, takvim uygunluğu), ADR, RevPAR | Gayrimenkul yatırımcıları |
| Temizlik ücreti kıyaslaması | Mülk türlerine göre temizlik ücretleri (ABD’de büyük şehirlerde ortalama aralık $81–$335) | Ev sahipleri, fiyatlandırma danışmanları |
| Yorum duygu analizi | NLP/duygu puanlaması için konuk yorumları | Veri bilimciler, konaklama ekipleri |
| Akademik araştırma | Konut politikası, turizm, kent ekonomisi için pazar düzeyi veri setleri | Araştırmacılar (1.021 Airbnb ile ilgili akademik makalenin %48,7’si çekilmiş veriler kullandı) |
| Rakip takibi | Yeni ilanlar, fiyat değişiklikleri, zaman içindeki uygunluk durumu | Kısa süreli kiralama işletmecileri, pazar analistleri |
Fiyat izleme veya rakip takibi gibi sürekli kullanım senaryoları için planlı ya da otomatik veri çekimi özellikle değerlidir — size tek seferlik bir anlık görüntü değil, güncel veri gerekir.
Kısa süreli kiralama pazarı, geleneksel otellerden daha hızlı büyüyor: STR talebi ve otel talebi %0,3 daraldı. Bu alandaysanız, veriniz sizin avantajınızdır.
Airbnb Verisi Çekmeyi Zorlaştıran Nedir?
Tek bir satır kod yazmadan önce, Airbnb’nin veri çekme zorluğunda neden olarak değerlendirildiğini anlamak faydalı olur. Üç sorun üst üste biniyor.
Airbnb’nin Bot Karşıtı Savunmaları
Airbnb, ile birlikte çalışan özel bir WAF kullanır; bu, her isteği aynı anda birden fazla boyutta puanlayan kurumsal düzeyde bir bot tespit sistemidir. Bu sadece hız limiti koymak değildir — yapay zekâ destekli parmak izi çıkarmadır.

Risk seviyesine göre sıralanmış tespit katmanları:
- TLS Parmak İzi (YÜKSEK): Python’un
requestskütüphanesi, gerçek hiçbir tarayıcıyla eşleşmeyen benzersiz bir TLS el sıkışma imzasına sahiptir. Akamai, JA3/JA4 yöntemleriyle şifre takımlarını, uzantıları ve ALPN sırasını analiz eder. Standartrequests, korumalı sitelerde yaklaşık elde ederken, tarayıcı TLS parmak izlerini taklit eden kütüphaneler %92’ye ulaşır. - JavaScript Yürütme (YÜKSEK): Akamai, “sensör verisi” toplayan istemci tarafı betikler çalıştırır — cihaz özellikleri, donanım kapasitesi, işletim sistemi ayrıntıları. Bu süreç
_abckçerezini oluşturur. Bu JavaScript çalıştırılmadan istekler engellenir. - Tarayıcı Parmak İzi (YÜKSEK): Canvas, WebGL ve yazı tipi analizi otomasyon araçlarını tespit eder. Headless tarayıcılar
navigator.webdriverbayraklarını, eksik eklentileri ve tutarsız donanım değerlerini açığa çıkarır. - HTTP Başlık Analizi (YÜKSEK): Eksik
Sec-Fetch-*başlıkları, Airbnb’de . - IP İtibarı (ORTA): Veri merkezi IP’leri anında engellenir. Ölçekli kullanımda residential proxy zorunludur.
- Davranışsal Analiz (ORTA): Fazlasıyla düzenli zamanlama, fare hareketi olmaması, kaydırma yapılmaması — bunların hepsi açık ipucu verir.
Engellendiğinizde şu yanıtları görebilirsiniz: 403 Forbidden (parmak izi başarısız), 429 Too Many Requests (hız limiti), 503 Service Unavailable (Akamai challenge sayfası) veya bir CAPTCHA sayfası.
Airbnb’nin Dinamik ve JavaScript Ağırlıklı Sayfaları
Airbnb’ye yapılan düz bir requests.get() isteği, yer tutucu HTML içeren bir React kabuğu döndürür — gerçek ilan verisi gelmez. : “Sıradan HTTP istekleri çalışmıyor; doğru proxy’ler ve gerçek JavaScript render etme olmadan Airbnb’yi veri çekmüyorsunuz, sadece yer tutucuları çekiyorsunuz.”
Gerçek veriler istemci tarafında dahili GraphQL API çağrılarıyla alınır (/api/v3/StaysSearch arama sonuçları için, /api/v3/PdpPlatformSections ilan detayları için). Bu da çoğu faydalı verinin tam bir tarayıcı ya da API yakalama gerektirdiği anlamına gelir.
DOM Sürekli Değişiyor
Airbnb, her dağıtımdan sonra değişen hash’li sınıf adlarına sahip CSS-in-JS kullanır. Belgelenmiş örnekler arasında _tyxjp1, lxq01kf, atm_mk_h2mmj6, t1jojoys ve _8s3ctt bulunur. bunu şöyle açıklıyor: “Bu sınıflar kararlı olacak şekilde tasarlanmadı ve sayfada görünür bir değişiklik olmadan bile her an değişebilir.”
Geliştirici topluluğu bu acıyı uzun zamandır belgeliyor. , “CSS sınıfları sürekli değişir ve onlara güvenmek, scraper’ınızı kırmanın en hızlı yoludur” diyor. DEV Community’de deneyimli bir geliştirici bunu çok güzel özetlemiş: “%50 daha yavaş ama asla bozulmayan bir scraper, her hafta ölen hızlı bir scraper’dan sonsuz derecede değerlidir.”
Sektör tahminleri, gösteriyor; bunun nedeni DOM değişimleri, parmak izi güncellemeleri veya uç nokta kısıtlamaları.
Yaklaşımınızı Seçin: Airbnb Verisi Çekmenin 5 Yolu
Koda geçmeden önce karşılaştırma şöyle. Her yaklaşımın gerçek artı ve eksileri var — evrensel olarak “en iyi” yöntem yok.
| Yaklaşım | Kurulum Eforu | Hız | Bot Karşıtı Dayanıklılık | Bakım | En Uygun |
|---|---|---|---|---|---|
Saf HTTP (requests / pyairbnb) | Düşük | Hızlı | Orta (API değişikliklerine karşı kırılgan) | Orta | Hızlı araştırma, küçük veri setleri |
| Tarayıcı otomasyonu (Selenium) | Yüksek | Yavaş | Orta | Yüksek (DOM kırılmaları) | Dinamik içerik, tarihe bağlı fiyatlandırma |
| Tarayıcı otomasyonu (Playwright) | Orta | Orta | Orta-Yüksek | Orta | Selenium’a modern alternatif |
| Scraping API (ScrapingBee, Bright Data) | Düşük | Hızlı | Yüksek (yerleşik proxy dönüşümü) | Düşük | Ölçekli veri çekme, üretim kullanımı |
| Kodsuz (Thunderbit) | Minimum | Hızlı | Yüksek (AI düzen değişikliklerine uyum sağlar) | Yok | Geliştirici olmayanlar, tek seferlik analiz |
Bu yazının geri kalanı Python yaklaşımlarını adım adım anlatıyor; kodu tamamen atlamak isteyenler için sonunda bir no-code bölümü de var.
Adım Adım: Requests ile Python Kullanarak Airbnb Verisi Çekin (HTTP-Öncelikli Yaklaşım)
Bu, hafif ve hızlı başlangıç seçeneği — tarayıcı gerekmez, chromedriver derdi yok. Takas: bazı veriler için çalışır, hepsi için değil.
Python Ortamınızı Kurun
Bir proje klasörü oluşturun ve sanal ortam kurun:
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, Airbnb’nin dahili StaysSearch GraphQL API’sini yakalayan hafif bir kütüphanedir (, son sürüm Şubat 2026). HTML’yi hiç kazımaz; bu da onu CSS sınıfı değişikliklerine karşı dayanıklı kılar. Tek bakımcı modeli bir risk faktörüdür, ancak aktif olarak güncelleniyor.
Seçenek A: Hızlı Arama Sonuçları İçin pyairbnb Kullanımı
Yapılandırılmış Airbnb verisine en hızlı yol:
1import pyairbnb
2import pandas as pd
3# Konum ve tarihe göre ara
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# DataFrame'e dönüştür
12df = pd.DataFrame(results)
13print(df[['name', 'price', 'rating', 'reviewsCount', 'url']].head())
14df.to_csv("airbnb_austin.csv", index=False)
pyairbnb, get_details(), get_price(), get_reviews(), get_calendar() ve get_listings_from_user() işlevlerini de destekler. Tüm fonksiyonlar proxy URL parametresiyle dönüşümü kabul eder.
Seçenek B: BeautifulSoup ile Manuel HTTP İstekleri
Üçüncü taraf bir kütüphaneye bağımlı olmak istemiyorsanız, istekleri doğrudan gönderebilirsiniz. Dikkat: düz requests, TLS parmak izi nedeniyle hızlıca engellenir. Tarayıcı TLS parmak izlerini taklit eden curl_cffi kullanmak başarı oranlarını ciddi biçimde artırır.
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")
Schema.org Microdata’dan Veri Çekme
Airbnb, schema.org microdata’yı doğrudan HTML işaretlemesine gömer — ve bu semantik etiketler CSS sınıf seçicilerinden . itemprop="itemListElement" kapsayıcılarını arayın:
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)
Sınırlama şu: schema.org etiketleri size ilan adlarını, URL’leri ve konumları verir — ama fiyatları, puanları ya da olanakları vermez. Daha zengin veri için tarayıcı otomasyonu veya API yakalama gerekir.
Adım Adım: Selenium veya Playwright ile Python Kullanarak Airbnb Verisi Çekin
Dinamik içerik gerektiğinde — tarihe bağlı fiyatlar, “Daha fazla göster” düğmelerinin arkasındaki olanaklar, tam yorum metni — tarayıcı otomasyonu doğru araçtır.
Tarayıcı Otomasyonunu Ne Zaman Kullanmalı?
- Gerçek fiyatı göstermek için tarih seçimi gerektiren sayfalar
- Etkileşimli öğelerin arkasında gizlenen olanaklar ve yorumlar
- JavaScript çalıştıktan sonra yüklenen herhangi bir veri
- Sayfayla etkileşim kurmanız gerektiğinde (kaydırma, tıklama)
Selenium mu, Playwright mı? Kazanan Büyük Ölçüde Playwright Oldu
Playwright, tercih edilen tarayıcı otomasyon aracı olarak Selenium’u geride bıraktı. Daha hızlı, yerleşik async desteğine sahip, tarayıcı ikililerini otomatik kuruyor ve modern web uygulamalarını daha iyi işliyor. Selenium’un kalıcı — ChromeDriver’ın Chrome güncellemelerinin gerisinde kalması — hâlâ sürekli bir baş ağrısı.
Yine de Selenium’un daha büyük bir eğitim ve StackOverflow yanıtları ekosistemi var — yani hangisine rahatsanız onu kullanın.
Playwright Kurulumu
1pip install playwright playwright-stealth
2playwright install chromium
Airbnb’ye Gidip İlanları Çekme
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 daha riskli
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 # Daha kararlı olduğu için sınıflar yerine data-testid kullanarak ilan kartlarının görünmesini bekle
17 await page.wait_for_selector('[data-testid="card-container"]', timeout=15000)
18 # İlan verilerini çek
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())
GraphQL API’sini Yakalama (En Güvenilir Kendin Yap Yöntemi)
Sürekli bozulan DOM öğelerini çözümlemek yerine, Airbnb’nin dahili API çağrılarını yakalayabilirsiniz. Bu size temiz, yapılandırılmış JSON döndürür:
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 yanıtını ayrıştır
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')}")
StaysSearch yanıtı id, name, roomTypeCategory, bedrooms, bathrooms, personCapacity, avgRating, reviewsCount, isSuperhost ve tam fiyatlandırma dökümünü içerir. Bu, Airbnb’nin ön yüzünün sayfayı oluştururken kullandığı verinin aynısıdır.
Sayfalama ile Başa Çıkma
Airbnb sayfa başına yaklaşık 18 ilan gösterir ve items_offset URL parametresini kullanır. Üst sınır yaklaşık 17 sayfadır (arama başına ~300 ilan).
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): # En fazla ~17 sayfa
6 offset = page_num * 18
7 paginated_url = f"{base_url}&items_offset={offset}"
8 # ... yukarıdaki gibi gidip veri çekin ...
9 time.sleep(random.uniform(3, 7)) # Sayfalar arasında rastgele gecikme
Python ile Airbnb Fiyatlandırması Nasıl Çekilir? (Tarihe Bağlı Fiyat Sorununu Çözme)
Birçok rehberin atladığı bölüm burası — ve fiyat analizi için en önemli kısım da bu.
Airbnb Fiyatları Neden Tarih Olmadan Görünmez?
Zamanın yaklaşık %90’ında Airbnb, gerçek fiyatı göstermeden önce giriş/çıkış tarihleri ister. Tarih olmadan yalnızca belirsiz bir “gecelik fiyat” aralığı görürsünüz (bazen de hiç fiyat görünmez). : “Bir ilan fiyat göstermiyorsa (örneğin Airbnb sizden tarihleri veya konuk sayısını değiştirmenizi istiyorsa), fonksiyon basitçe None döndürür.”
İyi haber: Nisan 2025 itibarıyla Airbnb, artık dünya çapındaki tüm konuklar için . Daha önce “Toplam Fiyatı Göster” seçeneği vardı — varsayılan olmadan önce yaklaşık 17 milyon konuk bunu kullandı.
Tarihleri URL Parametreleriyle Geçme
Arama URL’nize her zaman checkin ve checkout ekleyin:
1https://www.airbnb.com/s/Austin--TX/homes?checkin=2025-08-01&checkout=2025-08-03&adults=2
Bu, Airbnb’nin sayfa ve API yanıtlarında gerçek gecelik ve toplam fiyatı döndürmesini sağlar.
Fiyat Analizi İçin Tarih Aralıklarında Döngü Kurma
Mevsimlere göre fiyat verisine ihtiyaç duyan ev sahipleri ve yatırımcılar için:
1from datetime import datetime, timedelta
2start_date = datetime(2025, 7, 1)
3end_date = datetime(2025, 12, 31)
4stay_length = 2 # gece
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) # Haftalık aralıklar
12for checkin, checkout in date_ranges:
13 url = f"https://www.airbnb.com/s/Austin--TX/homes?checkin={checkin}&checkout={checkout}&adults=2"
14 # ... fiyat verisini çek ...
15 time.sleep(random.uniform(5, 10)) # Zamanlamada kibar olun
GraphQL API yanıtından fiyat ayrıştırırken, pricingQuote nesnesini arayın. Bu nesne price.total, price.priceItems (temizlik ücreti, hizmet ücreti gibi tek tek kalemler) ve rate.amount (gecelik ücret) bilgilerini içerir.
Airbnb Veri Çekicinizin Site Yeniden Tasarımlarından Sağ Çıkmasını Sağlama
Kimsenin yazmak istemediği bakım bölümü bu — ama dürüst olmak gerekirse, her Airbnb veri çekme projesinin en önemli kısmı da bu.
Kırılgan ve Dayanıklı Seçiciler
| Seçici Stratejisi | Kırılma Riski | Kod Eforu | Örnek |
|---|---|---|---|
CSS sınıf adları (örn. .t1jojoys) | 🔴 Yüksek — sık değişir | Düşük | soup.select('.t1jojoys') |
data-testid öznitelikleri | 🟡 Orta — daha kararlı | Düşük | soup.select('[data-testid="listing-card-title"]') |
| HTML’de Schema.org microdata | 🟢 Düşük — yapısal standart | Orta | soup.find("meta", itemprop="name") |
| GraphQL API yakalama | 🟢 Düşük — yapılandırılmış JSON | Orta | response.json()["data"]["presentation"] |
| AI tabanlı çıkarım (Thunderbit) | 🟢 Yok — otomatik uyum sağlar | Yok | 2 tık arayüz, kod yok |
data-testid Özniteliklerini Kullanma
Şu anda Airbnb’de belgelenen data-testid değerleri arasında card-container, listing-card-title, listing-card-subtitle ve listing-card-name bulunuyor. Bunlar görsel stil yerine Airbnb’nin dahili test çerçevesine bağlı olduğu için CSS sınıflarından daha seyrek değişir. Yine de değişebilirler — sadece daha az sıklıkla.
1# Sınıf tabanlı seçicilerden daha dayanıklı
2title = await page.query_selector('[data-testid="listing-card-title"]')
Schema.org Microdata Kullanma
Airbnb, HTML işaretlemesinde doğrudan itemprop öznitelikleri kullanır. Bunlar web standartlarına uyar ve görsel CSS sınıflarına göre çok daha az değişir:
1# schema.org işaretlemesini kullanarak tüm ilan öğelerini çıkar
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"]
GraphQL API’sini Yakalama
Kendin yap yaklaşımında en güvenilir seçenek. Airbnb’nin dahili API’si, ön yüzün tüketmesi için yapılandırılmış temiz JSON döndürür. Ön yüz ekibi de buna bağımlı olduğu için yanıt formatı DOM’a göre daha seyrek değişir.
AI Tabanlı Çıkarım Neden Bakımı Tamamen Ortadan Kaldırır?
En iyi seçici stratejileri bile sonunda bozulur. data-testid değerleri yeniden adlandırılır. API yanıt yapıları sürümlenir. Bakımı gerçekten ortadan kaldıran tek yaklaşım, sayfayı her seferinde AI ile taze okuyandır — hiç sabit seçici kullanmadan. Bunun devamı aşağıdaki Thunderbit bölümünde.
Airbnb Verisi Çekerken Engellenmekten Nasıl Kaçınılır?
Deneyim ve topluluk uzlaşısından gelen pratik ipuçları.
Proxy’leri Döndürün (Residential Zorunlu)
Veri merkezi IP’leri Airbnb tarafından anında engellenir. Anlamlı ölçekte kullanım için residential proxy gerekir. Performans ve fiyat açısından önde gelen sağlayıcılar:
| Sağlayıcı | Fiyat (GB başına) | Başarı Oranı | Notlar |
|---|---|---|---|
| Decodo (eski adıyla Smartproxy) | 100GB’da yaklaşık $2,20/GB | 99,68% | Ölçülen en hızlı (0,54 sn yanıt) |
| Bright Data | 100GB’da yaklaşık $5,04/GB | %99+ | En büyük havuz, en fazla özellik |
| Oxylabs | 100GB’da yaklaşık $4/GB | %99+ | E-ticaret için güçlü |
Deneyimli bir geliştiriciden önemli bir dönüşüm içgörüsü: “Her istek için IP değiştirmek aslında bir kırmızı bayraktır. Gerçek kullanıcılar bir oturum boyunca aynı IP’yi kullanır.” Öneri, 5–10 dakikalık yapışkan oturumlar kullanıp her 20–30 istekte bir döndürmektir.
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")
İsteklerinizi Yavaşlatın
Topluluk uzlaşısına göre güvenli eşikler:
- Saat başına en fazla sayfa: ≤100 (~1,6/dk)
- İstekler arası gecikme: 3–10 saniye (rastgele, tercihen Gauss dağılımı)
- Oturum molaları: Her 20 istekte bir 30–60 saniye ara
- En uygun veri çekme penceresi: Yoğun olmayan saatler (~yerel saatle 02:00)
- 429 hatalarında: Jitter ile üstel geri çekilme
1import random
2import time
3delay = random.gauss(5, 1.5) # Ortalama 5 saniye, std sapma 1,5
4delay = max(2, min(delay, 10)) # 2-10 saniye arasında sınırla
5time.sleep(delay)
Eksiksiz ve Tutarlı Başlıklar Kullanın
Eksik Sec-Fetch-* başlıkları, . Her başlık kendi içinde tutarlı olmalıdır — User-Agent’iniz Windows üzerinde Chrome 131 diyorsa, diğer tüm başlıklar da bu kimlikle uyumlu olmalıdır.
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 Tarayıcıları Dikkatli Kullanın
Playwright için playwright-stealth paketi, yaklaşık 17 kaçınma modülünü yamalar (navigator.webdriver, plugins, languages, WebGL). Ancak modern bot karşıtı sistemler, yamalanan ~12 özelliğe karşı 40’tan fazla özelliği kontrol eder. Headless olmayan modda (headless=False) çalışmak daha güvenlidir ama daha yavaştır.
Selenium için undetected-chromedriver, otomasyon göstergelerini kaldırmak üzere ChromeDriver ikilisini yamalar; ancak headless mod yine de kararsız kalır.
Ölçek İçin Bir Scraping API Düşünün
Binlerce sayfa çekiyorsanız, bir scraping API proxy dönüşümünü, CAPTCHA çözmeyi ve JS render etmeyi sizin için yönetir. Bright Data, ilan başına 48 alanla %99 başarı elde etti. Bedeli ise maliyet: ScrapingBee’nin stealth proxy modu istek başına tüketir; bu yüzden aylık 49 dolarlık plan yalnızca yaklaşık 3.333 stealth istek sağlar.
Python Olmadan Airbnb Verisi Çekin: Thunderbit ile Kodsuz Alternatif
Airbnb verisi çeken herkes geliştirici değil. Ev sahipleri fiyat karşılaştırması ister. Yatırımcılar pazar verisi ister. Analistler bir tablo ister. Python bölümlerini okuyup “bu, üstlenmek istediğimden daha fazla bakım işi” diye düşündüyseniz, bu bölüm tam size göre.
Thunderbit Airbnb Verisini Birkaç Tıkta Nasıl Çeker?
, bir olarak çalışan bir AI web scraper’dır. İş akışı şöyledir:
- Uzantıyı yükleyin Chrome Web Store’dan
- Bir Airbnb arama sonuçları sayfasına gidin — doğru fiyatlandırma için URL’ye tarihleri ekleyin (örn.
?checkin=2025-08-01&checkout=2025-08-03) - “AI Suggest Fields”e tıklayın — Thunderbit sayfayı tarar ve ilan adı, fiyat, puan, konum ve URL gibi sütunları otomatik algılar
- “Scrape”e tıklayın — veriler yapılandırılmış bir tabloya doldurulur
- “Scrape Subpages”i kullanın — her ilan detay sayfasını ziyaret edip olanakları, yorumları, ev sahibi bilgilerini ve tam fiyat dökümünü ek bir ayar yapmadan çekin
- Dışa aktarın Google Sheets, Excel, Airtable veya Notion’a
Alt sayfa veri çekme özelliği burada önemlidir. Python yaklaşımlarında detay sayfalarını çekmek; ayrı ayrıştırma mantığı yazmayı, yorumlar içinde sayfalama yönetmeyi ve paralel istekleri kontrol etmeyi gerektirir. Thunderbit ile tek tık.
Thunderbit Neden Airbnb Veri Çekimindeki En Büyük Üç Sorunu Çözer?
Yukarıda anlattığım üç sorun — bot karşıtı savunmalar, JavaScript render etme ve DOM kırılmaları — Python scraper’larını bakım açısından zor yapan şeylerin ta kendisi. Thunderbit bunların üçünü de ele alır:
- IP engeli derdi yok: Thunderbit’in Cloud Scraping modu proxy dönüşümünü dahili olarak yönetir
- Seçici kırılmaları yok: AI sayfayı her seferinde taze okur — bakım gerektiren CSS seçiciler yok, Airbnb yeniden tasarım yaptığında güncellenecek kod yok
- Kurulum derdi yok: Selenium sürücüleri yok, Python ortamı yok, bağımlılık çakışmaları yok
- Planlı veri çekme: Sürekli fiyat takibi için doğal dilde zaman aralığını tanımlayın — dinamik fiyatlandırma ve rakip takibi kullanım senaryoları için harika
Ne Zaman Python, Ne Zaman Thunderbit Kullanmalı?
Bu bir ya o ya bu meselesi değil — ihtiyacınıza bağlı:
| İhtiyaç | Python | Thunderbit |
|---|---|---|
| Veri çekme mantığı üzerinde tam kontrol | ✅ Evet | ❌ Hayır |
| Kodlama becerisi olmadan çalışır | ❌ Hayır | ✅ Evet |
| DOM değişikliklerini otomatik işler | ❌ Hayır | ✅ Evet (AI tabanlı) |
| Alt sayfa veri çekme (detay sayfaları) | Karmaşık kurulum | 1 tık |
| Planlı/tekrarlayan veri çekme | Özel cron işi | Yerleşik zamanlayıcı |
| Sheets/Excel/Airtable’a dışa aktarma | Manuel kod | Yerleşik |
| Veri boru hatlarına entegrasyon | ✅ Evet | Sınırlı |
| Ölçekte maliyet (10K+ sayfa) | Sunucu + proxy maliyetleri | Thunderbit fiyatlandırması |
Kod seviyesinde kontrol, özel mantık ya da mevcut bir veri boru hattına entegrasyon gerekiyorsa Python kullanın. Veriyi sıfır bakım ile hızlı almak istiyorsanız, Thunderbit daha pragmatik bir seçimdir.
Airbnb Verisi Çekerken Yasal ve Etik İpuçları
Kısa ve pratik tutuyorum — avukat değilim ve bu hukuki tavsiye değildir.
Kanun genel olarak ne diyor:
- kararı, kimlik doğrulama gerektirmeyen web sitelerindeki herkese açık verilerin çekilmesinin CFAA’yı ihlal etmediğini ortaya koydu
- (Ocak 2024): Bir yargıç, Hizmet Şartları’nın oturum kapalı scraper’lar için bağlayıcı olmadığına hükmetti
- davası (2025), CAPTCHA ve hız limitlerini aşmanın DMCA anti-circumvention hükümlerini ihlal edebileceğine dair yeni bir teori ortaya koyuyor — bu henüz test edilmedi ama izlemeye değer
Airbnb ne diyor: , otomatik veri toplamayı açıkça yasaklıyor. Ancak Airbnb, bugüne kadar hiçbir scraper’a açıkça dava açmadı. , Airbnb’nin onu “çöp” diye nitelemesine rağmen 11+ yıldır hukuki bir itiraz olmadan faaliyet gösteriyor.
Pratik rehber:
- Yalnızca herkese açık veriyi çekin (giriş duvarlarını aşmayın)
robots.txtyönergelerine saygı gösterin- Sunucuları agresif istek hızlarıyla zorlamayın
- GDPR/CCPA kapsamında kişisel verileri dikkatle yönetin
- Ticari kullanım senaryolarında hukuk danışmanına başvurun
Sonuç ve Önemli Çıkarımlar
Airbnb veri çekimi, “hızlı ve kirli”den “üretim sınıfı”na uzanan bir yelpazede yer alıyor. Önemli çıkarımlar:
- URL’de her zaman tarih geçin (
checkinvecheckoutparametreleri) — bunlar olmadan fiyat verisi işe yaramaz - CSS sınıf adlarına güvenmeyin. Bunun yerine
data-testidözniteliklerini, schema.org microdata’yı ya da GraphQL API yakalamayı kullanın - Ölçekte residential proxy zorunludur. Veri merkezi IP’leri anında engellenir
- İstekleri yavaşlatın — 3–10 saniyelik rastgele gecikmeler, yapışkan oturumlar ve hatalarda üstel geri çekilme
- Sıfır bakım için, gibi AI tabanlı araçlar seçici kırılmalarını tamamen ortadan kaldırır — Python scraper’larını pahalı hale getiren asıl sorun budur
- Aracınızı projeye göre seçin. Hızlı araştırma mı?
pyairbnb. Dinamik fiyat analizi mi? API yakalayan Playwright. Kodsuz sürekli izleme mi? Thunderbit. Üretim ölçeği mi? Bir scraping API.
Kodsuz yolu denemek için, — birkaç Airbnb arama sayfasında yaklaşık iki dakikada test edebilirsiniz. Python yaklaşımı için bu yazıdaki tüm kod kalıpları kendi özel kullanım senaryonuza uyarlanabilecek şekilde hazır.
Web veri çekme yaklaşımları ve araçları hakkında daha fazla bilgi için , ve rehberlerimize göz atın. Ayrıca üzerindeki eğitim videolarını da izleyebilirsiniz.
SSS
Airbnb veri çektiğiniz için sizi engelleyebilir mi?
Evet. Airbnb, TLS parmak izi, JavaScript zorlukları, tarayıcı parmak izi ve IP itibarı puanlamasıyla Akamai Bot Manager kullanır. Tespit edilmeniz halinde 403, 429 veya CAPTCHA yanıtları alırsınız. Proxy dönüşümü, gerçekçi başlıklar ve istekleri yavaşlatmak riski azaltır; ancak yüksek hacimde tespitten tamamen kaçınmanın garantili bir yolu yoktur.
Airbnb verisi çekmek yasal mı?
Herkese açık verilerin çekilmesi, ABD içtihat hukukuna göre genel olarak izinlidir (hiQ v. LinkedIn, Meta v. Bright Data), ancak Airbnb’nin Hizmet Şartları bunu açıkça yasaklar. Hukuki zemin yargı alanına göre değişir ve yükselen DMCA anti-circumvention teorisi (Reddit v. Perplexity), bot karşıtı önlemleri aşan scraper’ları etkileyebilir. Ticari kullanım için hukuk danışmanına başvurun.
Airbnb’den hangi veriler çekilebilir?
Arama sonuçlarından: ilan adı, fiyat (tarih ile), puan, yorum sayısı, konum, mülk türü ve URL. Detay sayfalarından: tam açıklama, olanaklar, ev sahibi bilgileri, tüm yorumlar, fotoğraflar, takvim uygunluğu, temizlik ücretleri ve fiyat dökümleri. Derinlik, yalnızca arama sayfalarını mı yoksa tek tek ilan sayfalarını da mı çektiğinize bağlıdır.
Python ile Airbnb verisi çekmek için proxy gerekir mi?
Birkaç sayfa için proxiesiz idare edebilirsiniz. 20–30 isteğin ötesinde, residential proxy dönüşümü güçlü biçimde tavsiye edilir. Veri merkezi IP’leri anında engellenir. Topluluk uzlaşısı, tek bir IP’den saat başına en fazla yaklaşık 100 sayfa ve istekler arasında 3–10 saniyelik rastgele gecikmeler önermektedir.
Kod yazmadan Airbnb verisini çekmenin en kolay yolu nedir?
, AI destekli alan algılama ile Airbnb arama sonuçlarını ve ilan detay sayfalarını çekmenizi sağlar — yapılandırılacak seçici yok, yazılacak kod yok. Alt sayfa veri çekmeyi (olanaklar, yorumlar ve ev sahibi bilgileri için) destekler, Google Sheets, Excel, Airtable veya Notion’a dışa aktarır ve sürekli fiyat takibi için planlı veri çekme sunar.
Daha Fazla Bilgi
