Yelp işletme verilerini kazımak (scrape Yelp), yerel-işletme ve yorum veri kümeleri oluşturan geliştiriciler için yaygın bir ihtiyaçtır. Yelp, işletme adı, adres, kategori, çalışma saatleri, puan ve yorum metinlerini herkese açık işletme sayfalarında sunar; ancak bu verileri ölçekli biçimde toplamak, PerimeterX/HUMAN tabanlı bot savunması ve IP itibar puanlaması nedeniyle karmaşıktır. Bu rehber, yalnızca oturum açmadan erişilebilen kamuya açık verilerle sınırlıdır ve Fusion API'nin üç-yorum sınırını aşmanız gerektiğinde üretim ölçeğinde karşılaşacağınız tuzakları ele alır.
Yasal uyarı: Bu rehber yalnızca kamuya açık, oturum gerektirmeyen verilerle ilgilenir. Yelp'in Kullanım Şartları'na, ABD'de Computer Fraud and Abuse Act (CFAA) kapsamındaki ilgili yasalara ve Avrupa'da GDPR kapsamındaki kişisel veri kurallarına uymak sizin sorumluluğunuzdadır. Yorum yazarlarının kullanıcı adları ve tam metinleri kişisel veri sayılabilir; bu tür verileri saklamadan önce anonimleştirme ve yasal danışmanlık almanız önerilir. Bu içerik hukuki tavsiye değildir.
Yelp İşletme Verilerini Kazımak: Neleri Hedeflemeli?
Yelp'in işletme sayfaları /biz/<slug> yolunda yer alır ve oturum açmadan erişilebilir. Tipik bir işletme sayfası şu kamuya açık alanları içerir:
- İşletme adı, adres, telefon ve coğrafi koordinatlar.
- Kategoriler (ör. “Korean, BBQ”), çalışma saatleri, özellikler (park, WiFi, teslimat).
- Puan (1–5) ve toplam yorum sayısı.
- Yorum metni, puan, tarih ve kısmen maskelenmiş kullanıcı adı.
Yelp'in resmi Fusion API'si, işletme arama ve detay endpoint'leri sunar; ancak yorum endpoint'i işletme başına en fazla 3 yorum döndürür. Bu kap, REST tabanlı bir “Yelp yorum kazıma” (Yelp review scraper) hedefini doğrudan anlatır: Eğer tüm yorumları toplamanız gerekiyorsa, Fusion API yetersiz kalır ve kamuya açık HTML/JSON'a başvurmanız gerekir.
Kamuya Açık Veri ile Oturum Duvarlı Veri
Oturum açmadan erişilebilenler: işletme profili, puan, kategori, saatler ve sayfa başına görünen yorumlar. Oturum duvarlı (login-walled) içerikler arasında kullanıcı profilleri, doğrulanmış arkadaş yorumları ve bazı özel mesajlar bulunur. Bu rehber yalnızca oturum gerektirmeyen verileri ele alır; oturum açarak erişilen verileri kazımak ToS ihlali ve CFAA riski taşır.
Yelp'in Bot Savunması: PerimeterX/HUMAN ve TLS Parmak İzi
Yelp, bot tespiti için PerimeterX (HUMAN) kullanır. PerimeterX, birkaç temel savunma katmanı uygular:
_px3çerezi ve sensor challenge: Tarayıcı tarafında üretilen, JavaScript ile imzalanmış bir sensor verisi gönderilir. Bu veri, fare hareketleri, ekran parametreleri ve zaman damgalarını içerir.- TLS parmak izi: İsteklerin ClientHello özellikleri (cipher sıralaması, uzantılar) gerçek tarayıcıyla karşılaştırılır. Python
requests'in varsayılan TLS imzası, PerimeterX için kolayca işaretlenir. - IP itibar puanlaması: Datacenter IP'leri genellikle düşük itibar puanına sahiptir; birkaç istek sonrasında CAPTCHA veya 403 yanıtı alırsınız.
- Rate-limit ve davranışsal heuristik: Çok hızlı istekler, tekdüze istek aralıkları ve tutarsız başlıklar bloklanır.
Pratik gözlem: Datacenter proxy'lerle Yelp'e yapılan ilk 10–30 istekten sonra CAPTCHA veya 403 oranı belirgin biçimde artar. Bu nedenle ölçekli Yelp işletme verisi toplamak için residential proxy'ler neredeyse zorunludur.
Neden Dönen Residential Proxy'ler ve ABD Coğrafi Hedeflemesi?
Yelp sonuçları konuma duyarlıdır. Austin'deki bir restoranı aramak için IP'nizin ABD'de — tercihen Teksas bölgesinde — olması gerekir. Datacenter IP'leri hem coğrafi hedeflemede zayıf kalır hem de PerimeterX'in itibar filtrelerine takılır. Dönen residential proxy'ler, gerçek ISP atanmış IP'leri sağlar ve -country-US-city-austin tarzı hedeflemeyle yerel işletme sonuçlarını doğru biçimde yakalamanıza imkan verir.
ProxyHat residential ağında ülke ve şehir hedeflemesi kullanıcı adı içinde yapılır. Örnek: user-country-US-city-austin. Bu, Yelp'in yerel arama ve işletme sıralamasını gerçek bir Austin kullanıcısının göreceği biçimde almanızı sağlar.
ProxyHat ile Yelp Kazıma: Python Örneği
Aşağıdaki örnek, ProxyHat residential gateway'i üzerinden Yelp işletme sayfasına istek atar ve gömülü __INITIAL_STATE__ JSON blob'unu ayrıştırır. Bu blob, sayfa render verilerini içerir ve yorumları yapısal biçimde çekmenin en sağlam yoludur.
import re
import json
import requests
PROXY = "http://user-country-US-city-austin-session-yelp01:PASSWORD@gate.proxyhat.com:8080"
proxies = {"http": PROXY, "https": PROXY}
headers = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0 Safari/537.36",
"Accept-Language": "en-US,en;q=0.9",
}
url = "https://www.yelp.com/biz/kerbey-lane-cafe-austin"
resp = requests.get(url, headers=headers, proxies=proxies, timeout=30)
resp.raise_for_status()
# Gömülü __INITIAL_STATE__ blob'unu yakala
match = re.search(r"window\.__INITIAL_STATE__\s*=\s*({.*?});", resp.text, re.S)
if not match:
raise RuntimeError("__INITIAL_STATE__ bulunamadı; muhtemelen CAPTCHA/bloklama")
state = json.loads(match.group(1))
# Yorum kökünü bul (yapı zamanla değişebilir; örnek yol)
review_node = state.get("biz", {}).get("reviews", [])
for r in review_node[:1]:
print({
"rating": r.get("rating"),
"text": (r.get("comment", {}).get("text", "") or "")[:120],
"date": r.get("localizedDate"),
})
Bu örnekte dikkat etmeniz gereken noktalar: (1) -session-yelp01 bayrağı, aynı IP'yi bir süre tutarak PerimeterX'in “IP atlaması” heuristiğinden kaçınmanıza yardımcı olur; (2) Accept-Language ve gerçekçi bir User-Agent başlığı parmak iz riskini azaltır; (3) __INITIAL_STATE__ bulunamazsa, genellikle CAPTCHA veya 403 dönmüş demektir — bu durumda oturumu değiştirin ve hızınızı düşürün.
Node.js ile SOCKS5 Üzerinden Yelp İsteği
Bazı senaryolarda SOCKS5, HTTP CONNECT'ten daha güvenilir çalışır. ProxyHat SOCKS5 portu 1080'dir. Aşağıda Node.js ile socks-proxy-agent örneği yer alır:
const { SocksProxyAgent } = require('socks-proxy-agent');
const fetch = require('node-fetch');
const agent = new SocksProxyAgent(
'socks5://user-country-US-session-yelp02:PASSWORD@gate.proxyhat.com:1080'
);
(async () => {
const res = await fetch('https://www.yelp.com/biz/torchys-tacos-austin', {
agent,
headers: {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0 Safari/537.36',
'Accept-Language': 'en-US,en;q=0.9',
},
});
const html = await res.text();
const m = html.match(/window\.__INITIAL_STATE__\s*=\s*({[\s\S]*?});/);
if (!m) { console.log('Bloklama/CAPTTCHA olası'); return; }
const state = JSON.parse(m[1]);
const reviews = state?.biz?.reviews || [];
console.log(reviews[0]?.rating, (reviews[0]?.comment?.text || '').slice(0, 120));
})();
Sayfalama, Hız Sınırı ve Oturum Sürekliliği
Yelp'te yorum sayfalama, genellikle ?start=20, ?start=40 tarzı offset parametreleriyle yapılır. Her işletme için 100–200+ yorum olabilir; bu nedenle tutarlı bir sayfalama döngüsü kurmanız gerekir.
Hız Sınırı (Rate-Limit Pacing)
Yelp için agresif istek hızları neredeyse her zaman bloklamaya yol açar. Sağlam bir başlangıç: her IP başına 2–5 saniye aralık, oturum başına 30–60 istek sonra oturum/IP rotasyonu. Rastgele gecikme eklemek (ör. random.uniform(2.0, 5.0)) tekdüze davranış heuristiklerini atlatmaya yardımcı olur.
Sticky Session Sürekliliği
ProxyHat'ta -session-abc123 bayrağı, aynı IP'yi belirli bir süre tutar. Aynı işletmenin tüm sayfalarını tek oturumla çekmek, PerimeterX'in IP atlama şüphesini azaltır. Farklı işletmeler için yeni oturum kimliği üretin:
import uuid
session_id = f"yelp-{uuid.uuid4().hex[:8]}"
proxy = f"http://user-country-US-city-austin-session-{session_id}:PASSWORD@gate.proxyhat.com:8080"
Dönen User-Agent'lar
Tek bir User-Agent, parmak iz riskini artırır. Gerçekçi, güncel tarayıcı User-Agent'larından oluşan bir havuzu döndürün. Ayrıca sec-ch-ua, sec-fetch-* ve Referer başlıklarını gerçekçi biçimde ayarlamak TLS ve başlık parmak izini düşürür. Daha sağlam bir yaklaşım için ProxyHat dokümantasyonundaki oturum ve coğrafi hedefleme parametrelerini inceleyin.
Yaklaşım Karşılaştırması: Fusion API vs HTML Kazıma
| Yaklaşım | Yorum Kapsamı | Blok Riski | Bakım Yükü | Uygun Senaryo |
|---|---|---|---|---|
| Fusion API (resmi) | İşletme başına 3 yorum | Çok düşük | Düşük | Sınırlı detay, düşük risk |
| HTML/JSON kazıma + residential proxy | Tüm yorumlar | Orta (PerimeterX) | Yüksek | Tam veri kümesi, ölçek |
| HTML kazıma + datacenter proxy | Tüm yorumlar | Çok yüksek | Yüksek | Önerilmez |
Yaygın Hatalar ve Kenar Durumlar
- CAPTTCHA döngüsü:
__INITIAL_STATE__bulunamadığında, genellikle CAPTCHA sayfası dönmüştür. İstekleri durdurun, oturumu değiştirin ve hızı düşürün. - Yorum yapısı değişimi: Yelp, gömülü JSON şemasını güncelleyebilir. Seçicilerinizi sık test edin ve kırılma uyarısı koyun.
- Konum yanılgısı: ABD dışı IP'lerle Austin sonuçları yanlış sıralanabilir.
-country-US-city-austinkullanın. - Kişisel veri: Kullanıcı adları ve tam yorum metni GDPR kapsamında kişisel veri olabilir. Anonimleştirme veya saklamama seçeneklerini değerlendirin.
Etik Kazıma ve Resmi API Kullanımı
Yelp işletme verilerini kazımadan önce şu soruları sorun: (1) İhtiyacınız veri Fusion API ile karşılanıyor mu? Eğer evet ise, resmi API her zaman daha güvenli ve sürdürülebilirdir. (2) robots.txt'yi kontrol edin ve sayfa erişim kurallarına uyun. (3) Kişisel veri içeren yorumları saklamanız gerekiyor mu, yoksa anonimleştirilebilir mi? GDPR uyumluluğu için anonimleştirme genellikle en güvenli yoldur.
Oturum açarak erişilen içeriklerden kaçının. Oturum duvarlı verileri kazımak, ToS ihlali ve CFAA kapsamında yasal risk taşır. Eğer bir veri parçası yalnızca giriş yaparak görünüyorsa, muhtemelen kamuya açık sayılmaz ve kazınması önerilmez.
Key Takeaways
- Yelp işletme sayfaları oturum gerektirmeden kamuya açıktır; Fusion API ise işletme başına 3 yorumla sınırlıdır.
- PerimeterX/HUMAN,
_px3sensor challenge, TLS parmak izi ve IP itibar puanlaması ile botları engeller.- Datacenter IP'leri birkaç istekte bloklanır; dönen residential proxy'ler ve
-country-US-city-austinhedeflemesi neredeyse zorunludur.- ProxyHat gateway
gate.proxyhat.com:8080(HTTP) ve:1080(SOCKS5) üzerinden kullanıcı adında hedefleme yapar.- Hız sınırı (2–5 sn), sticky session ve dönen User-Agent'lar blok riskini düşürür.
- Etik kazıma: robots.txt'ye uyun, kişisel veriyi anonimleştirin ve mümkün olduğunda Fusion API'yi tercih edin.
Yerel-işletme ve yorum veri kümeleri için ProxyHat'ın fiyatlandırma seçeneklerini, web kazıma kullanım senaryosunu ve proxy konumlarını inceleyin. SERP takibi için ayrıca SERP takip sayfasını görüntüleyin.






