Google Shopping Fiyat Scraping: API mi, HTML mi?
Google Shopping'de rekabetçi fiyat verisi toplamak istediğinizde ilk karşılaşacağınız karar: Google'ın sunduğu resmi API'yi mi kullanacaksınız, yoksa SERP HTML'ini mi parse edeceksiniz? Cevap kullanım senaryonuza bağlı — ama çoğu rekabet analizi ekibi için cevap HTML'dir.
Content API for Shopping, yalnızca kendi merchant hesabınızdaki ürünleri yönetmeniz için tasarlanmıştır. Rakiplerin fiyatlarını, satıcı tekliflerini veya pazar yeri verilerini çekemezsiniz. Google'ın Content API dokümantasyonu bunu açıkça belirtir: API, merchant'ın kendi ürün feed'lerini yönetmesi içindir. Bu nedenle, rakip fiyatları toplamak isteyen bir fiyat analisti olarak tbm=shop SERP HTML'ini veya /shopping/product/ detay sayfalarını parse etmek zorundasınız.
İşte bu noktada Google Shopping fiyat scraping devreye girer — ve doğru proxy stratejisi olmadan bu süreç hızlıca CAPTCHA duvarına çarpar.
Google'un Anti-Bot Mimarisi
Google, SERP scraping'e karşı çok katmanlı bir savunma uygular. Google Shopping için bu katmanlar daha da agresiftir çünkü ticari veriler reklam gelirleriyle doğrudan bağlantılıdır.
Birincil Anti-Bot Mekanizmaları
- reCAPTCHA v3 / Enterprise: Görünmez puanlama yapar; şüpheli trafiği otomatik olarak challenge'a yönlendirir.
- sorry/index Redirect: Şüpheli bir IP tespit edildiğinde Google, kullanıcıyı
google.com/sorry/indexsayfasına yönlendirir. Bu, tam CAPTCHA'dan önce gelen bir "yumuşak blok" sinyalidir. - Per-IP Rate Limiting: Aynı IP'den kısa sürede çok fazla istek geldiğinde Google, o IP'yi geçici olarak yasaklar. Eşikler bölge ve sorgu tipine göre değişir, ancak tipik olarak aynı IP'den dakikada 20-30 istekten sonra blok başlar.
- Browser Fingerprinting: User-Agent, Accept-Language, TLS parmak izi ve JavaScript yürütme davranışı birleşerek bir güven profili oluşturulur.
Bu mekanizmalar, veri merkezi IP'lerine karşı özellikle agresiftir. Google Cloud, AWS ve DigitalOcean gibi bilinen veri merkezi IP aralıklarını otomatik olarak daha yüksek risk olarak işaretler. DataDome ve PerimeterX gibi ticari anti-bot çözümlerinin Google'ın altyapısında kullanıldığı raporlar mevcuttur, ancak Google'ın birincil savunması kendi geliştirdiği sistemlere dayanır.
URL Kalıpları ve CSS Seçicileri
Google Shopping SERP'lerini scrape etmek için doğru URL kalıplarını ve güncel CSS seçicilerini bilmeniz gerekir. Google HTML yapısını sık değiştirir, bu yüzden seçicilerinizi düzenli olarak test etmeniz kritiktir.
SERP URL Kalıbı
https://www.google.com/search?tbm=shop&q=YOUR_QUERY&gl=US&hl=en
Burada tbm=shop parametresi Google Shopping sekmesini aktive eder. gl coğrafi konumu, hl dil ayarlar. Almanya için: gl=DE&hl=de.
Ürün Detay URL Kalıbı
https://www.google.com/shopping/product/PRODUCT_ID
Bu sayfa, bir ürün için tüm satıcı tekliflerini listeler. Fiyat karşılaştırması için en zengin veri kaynağı budur.
Kritik CSS Seçicileri (2026 itibarıyla)
| Veri Alanı | CSS Seçici | Açıklama |
|---|---|---|
| Ürün sonuç konteyneri | .sh-dgr__content | Her bir ürün kartının kök elementi |
| Ürün başlığı | .sh-dgr__content .tAxDx | Ürün adı ve link |
| Fiyat | .a8Pemb | Ana fiyat node'u (para birimi dahil) |
| Satıcı adı | .b5ycib .lqCZvb | Satıcı/mağaza adı |
| Puan | .RSc6Qd .vLMTZ .QIrs8 | Yıldız puanı (aria-label içinde) |
| Satıcı teklif paneli | .sh-pr__product-results | Detay sayfasındaki teklif listesi |
Not: Google bu sınıf adlarını her büyük güncellemede değiştirir. Seçicilerinizi bir CSS seçici referansı ile doğrulayın ve en az iki alternatif seçici yedekleyin.
Lokalize Fiyatlar ve Residential Proxy Stratejisi
Google Shopping fiyatları coğrafi olarak lokalize edilir. Bir ABD'li alıcı ile bir Alman alıcı aynı ürün için farklı satıcılar, farklı fiyatlar ve farklı para birimleri görür. Bu, Google Shopping fiyat scraping için residential proxy'leri zorunlu kılar.
Neden Datacenter IP'leri Yetersiz Kalır?
Datacenter proxy'leri, Google'ın anti-bot sistemleri tarafından yüksek risk olarak işaretlenir. Başarı oranları tipik olarak %30-50 civarındayken, residential proxy'lerde bu oran %85-95'e çıkabilir. Fiyat scraping'de her başarısız istek, kaçırılan bir veri noktası demektir.
Şehir Seviyesinde Geo-Targeting
ABD'de California'daki fiyatlar ile New York'taki fiyatlar farklı olabilir — özellikle yerel satıcılar veya bölgesel kargo maliyetleri devreye girdiğinde. ProxyHat ile ülke ve şehir seviyesinde hedefleme yapabilirsiniz:
# ABD - ülke seviyesi
http://user-country-US:pass@gate.proxyhat.com:8080
# Almanya - Berlin şehir seviyesi
http://user-country-DE-city-berlin:pass@gate.proxyhat.com:8080
# ABD - New York şehir seviyesi
http://user-country-US-city-new_york:pass@gate.proxyhat.com:8080
Bu seviyede hedefleme, gl ve hl URL parametreleriyle birleştiğinde gerçek bir yerel kullanıcının gördüğü fiyatları yakalamanızı sağlar. ProxyHat'ın lokasyon seçenekleri sayesinde 190+ ülkede IP adresi kullanabilirsiniz.
ProxyHat ile Python Scraping Örneği
Aşağıdaki örnek, ProxyHat residential proxy'leri üzerinden Google Shopping SERP'inden bir ürün bloğunu parse eder. Örnek, requests ve BeautifulSoup kullanır.
import requests
from bs4 import BeautifulSoup
import random
import time
# ProxyHat gateway ayarları
PROXY_HOST = "gate.proxyhat.com"
PROXY_PORT = 8080
PROXY_USER = "user-country-US"
PROXY_PASS = "your_password"
PROXY_URL = f"http://{PROXY_USER}:{PROXY_PASS}@{PROXY_HOST}:{PROXY_PORT}"
proxies = {
"http": PROXY_URL,
"https": PROXY_URL,
}
# Gerçekçi tarayıcı başlıkları
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
"AppleWebKit/537.36 (KHTML, like Gecko) "
"Chrome/121.0.0.0 Safari/537.36",
"Accept-Language": "en-US,en;q=0.9",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9",
}
def scrape_google_shopping(query, gl="US", hl="en"):
url = f"https://www.google.com/search?tbm=shop&q={query}&gl={gl}&hl={hl}"
try:
response = requests.get(url, proxies=proxies, headers=headers, timeout=30)
# Soft-block kontrolü
if "sorry/index" in response.url:
print("UYARI: Soft-block tespit edildi. IP değiştirin.")
return None
soup = BeautifulSoup(response.text, "html.parser")
results = []
# Ürün konteynerlerini seç
product_cards = soup.select(".sh-dgr__content")
for card in product_cards[:5]: # İlk 5 sonuç
title_el = card.select_one(".tAxDx")
price_el = card.select_one(".a8Pemb")
seller_el = card.select_one(".b5ycib .lqCZvb")
rating_el = card.select_one(".RSc6Qd .QIrs8")
product = {
"title": title_el.get_text(strip=True) if title_el else None,
"price": price_el.get_text(strip=True) if price_el else None,
"seller": seller_el.get_text(strip=True) if seller_el else None,
"rating": rating_el.get("aria-label") if rating_el else None,
}
results.append(product)
return results
except requests.exceptions.RequestException as e:
print(f"İstek hatası: {e}")
return None
# Örnek kullanım
results = scrape_google_shopping("wireless headphones")
if results:
for r in results[:3]:
print(f"Ürün: {r['title']}")
print(f"Fiyat: {r['price']}")
print(f"Satıcı: {r['seller']}")
print(f"Puan: {r['rating']}")
print("---")
Truncated örnek çıktı:
Ürün: Sony WH-1000XM5 Wireless Headphones
Fiyat: $348.00
Satıcı: Best Buy
Puan: 4.5 out of 5 stars
---
Ürün: Bose QuietComfort Ultra Headphones
Fiyat: $379.00
Satıcı: Amazon
Puan: 4.6 out of 5 stars
---
Bu örnek temel bir yapı sağlar. Üretim ortamında hata yönetimi, retry mantığı ve proxy rotasyonu eklemeniz gerekir. Daha gelişmiş scraping senaryoları için web scraping kullanım senaryolarımızı inceleyin.
Sayfalama, Gecikme ve Soft-Block Tespiti
Google Shopping fiyat scraping'i ölçeklendirdiğinizde, sayfalama ve istek hızı yönetimi kritik hale gelir.
Sayfalama
Google Shopping SERP'leri tipik olarak sayfa başına 20-30 ürün gösterir. İkinci sayfa için &start=20, üçüncü için &start=40 parametresini ekleyin:
https://www.google.com/search?tbm=shop&q=wireless+headphones&gl=US&hl=en&start=20
Rastgele Gecikmeler
Sabit gecikmeler (örneğin her zaman 3 saniye) bot tespitini kolaylaştırır. Bunun yerine, rastgele gecikmeler kullanın:
import random
time.sleep(random.uniform(3.0, 8.5))
Bu, istekler arası 3-8.5 saniye arası rastgele bir bekleme sağlar. İnsan davranışını taklit etmek, başarılı scraping'in temelidir.
Soft-Block Tespiti
Google, tam CAPTCHA'ya geçmeden önce genellikle bir "yumuşak blok" uygular. Aşağıdaki sinyalleri izleyin:
- URL değişimi: Yanıt URL'si
sorry/indexiçeriyorsa, IP'niz işaretlenmiştir. - Boş sonuçlar: Beklenen sonuç sayısından çok az veya sıfır sonuç dönüyorsa, Google sessizce sonuçları filtreliyor olabilir.
- HTTP 429: Çok fazla istek hatası, rate limit'e ulaştığınızı gösterir.
- CAPTCHA HTML: Yanıt gövdesinde
recaptchaveyag-recaptchastring'leri varsa, tam blok gerçekleşmiştir.
def detect_soft_block(response):
"""Soft-block sinyallerini tespit et"""
if response.status_code == 429:
return "rate_limit"
if "sorry/index" in response.url:
return "sorry_redirect"
if "recaptcha" in response.text.lower():
return "captcha"
if response.status_code == 200 and len(response.text) < 5000:
return "empty_response"
return None
# Kullanım
block_type = detect_soft_block(response)
if block_type:
print(f"Bloklar tespit edildi: {block_type}")
# IP'yi değiştir, bekle, veya rotasyon yap
time.sleep(random.uniform(10, 30))
# Yeni session ile yeniden dene
Sticky Session ile Tutarlılık
Bazı durumlarda, aynı oturumda birden fazla sayfa yüklemeniz gerekir (örneğin, bir ürün detayından sonra satıcı tekliflerini çekmek). ProxyHat'ın sticky session özelliği bunu sağlar:
# Aynı IP'yi 10-15 dakika boyunca koru
http://user-country-US-session-abc123:pass@gate.proxyhat.com:8080
Her benzersiz session-XXX değeri, farklı bir IP atar. Aynı session ID'yi kullandığınız sürece aynı IP'den çıkarsınız.
Sorgu Toplama ve Paralel İstekler
Yüzlerce ürünü takip ediyorsanız, sorguları gruplayın ve paralel istekler gönderin. Ancak paralellik, blok riskini artırır.
Önerilen Strateji
- Maksimum 5-10 eşzamanlı istek aynı IP'den. Daha fazlası rate limit tetikler.
- Her sorgu için farklı bir session ID kullanın, böylece her sorgu farklı bir IP'den gelir.
- Toplu sorgu listesi hazırlayın ve sıralı işleyin, paralel değil.
queries = [
"wireless headphones",
"bluetooth speaker",
"gaming mouse",
"mechanical keyboard",
]
for i, query in enumerate(queries):
# Her sorgu için yeni session (yeni IP)
session_id = f"shop_batch_{i}_{int(time.time())}"
proxy_user = f"user-country-US-session-{session_id}"
proxy_url = f"http://{proxy_user}:pass@gate.proxyhat.com:8080"
results = scrape_google_shopping(query)
# Sorgular arası rastgele bekleme
time.sleep(random.uniform(5.0, 12.0))
Etik ve Yasal Hususlar
Google Shopping fiyat scraping, teknik olarak mümkün olsa da, yasal ve etik sınırları aşmamak gerekir.
Temel İlkeler
- Sadece herkese açık veri: Google Shopping'de herkese açık olarak görünen fiyatları toplamak, gizli veya giriş gerektiren verileri toplamaktan farklıdır.
- robots.txt saygısı: Google'ın robots.txt dosyası,
/searchyollarını*user-agent için engeller. Bu, Google'ın scraping'i resmi olarak istemediği anlamına gelir; ancak bu dosya yasal bir yasak değil, bir tercihtir. - CFAA riski: ABD'de Computer Fraud and Abuse Act, "yetkisiz erişimi" suç sayar. Ancak
Van Buren v. United States(2021) kararı, "yetkisiz erişim" tanımını daraltmıştır. Yine de, bir scraping uygulamasının CFAA kapsamında değerlendirilmesi durumdan duruma değişir. - GDPR: AB'den erişiyorsanız veya AB kullanıcılarına ait veri topluyorsanız, GDPR geçerlidir. Fiyat verileri kişisel veri değildir, ancak IP adresleri kişisel veri sayılır — proxy log'larınızda dikkatli olun.
- Hız sınırları: Google'ın altyapısına aşırı yük bindirmek, bir hizmet saldırısı olarak yorumlanabilir. Makul hızda istek gönderin.
Resmi Çözümler Ne Zaman Uygun?
Google, resmi Shopping ve SERP API partnerleri aracılığıyla ticari veri erişimi sunar. Bu partnerler (SerpApi, Bright Data SERP API gibi), Google ile lisans anlaşmalarıyla çalışır ve veriyi JSON formatında teslim eder. Eğer kurumsal bir ekipte çalışıyorsanız ve yasal riski sıfıra indirmeniz gerekiyorsa, bu çözümler maliyetli olsa da en güvenli yoldur.
Kendi scraping altyapınızı kurmak istiyorsanız, ProxyHat'ın fiyatlandırma seçenekleri residential proxy'leri uygun maliyetle sunar. ProxyHat dokümantasyonu, entegrasyon detayları için referansınız olmalıdır.
Proxy Tipleri Karşılaştırması
| Özellik | Residential | Mobile | Datacenter |
|---|---|---|---|
| Başarı oranı (Google Shopping) | %85-95 | %90-98 | %30-50 |
| Ortalama gecikme | 200-800ms | 300-1200ms | 50-150ms |
| CAPTTCHA riski | Düşük | Çok düşük | Yüksek |
| Şehir seviyesi hedefleme | Evet | Sınırlı | Hayır |
| Maliyet | Orta | Yüksek | Düşük |
| Önerilen kullanım | Fiyat scraping | Yüksek riskli hedefler | Düşük riskli görevler |
Google Shopping için residential proxy'ler en iyi dengeyi sunar: yüksek başarı oranı, makul gecikme ve şehir seviyesinde hedefleme. Mobile proxy'ler daha yüksek başarı oranı sağlar ama maliyet daha yüksektir. SERP tracking kullanım senaryamızı da inceleyebilirsiniz.
Önemli Çıkarımlar
- Content API yalnızca kendi ürünleriniz içindir — rekabetçi fiyat verisi için SERP HTML parsing gereklidir.
- Residential proxy'ler zorunludur — datacenter IP'leri Google Shopping'de %30-50 başarı oranıyla çalışır, residential'larda bu %85-95'e çıkar.
- Şehir seviyesinde geo-targeting, lokalize fiyatları doğru yakalamanın anahtarıdır:
user-country-DE-city-berlin.- Soft-block sinyallerini izleyin —
sorry/indexredirect'i, HTTP 429 ve boş yanıtlar, tam CAPTCHA'dan önce gelen uyarılardır.- Rastgele gecikmeler kullanın — sabit 3 saniye yerine 3-8.5 saniye arası rastgele bekleme, bot tespitini zorlaştırır.
- Sticky session ile çok adımlı süreçlerde (SERP → ürün detayı → satıcı teklifleri) aynı IP'yi koruyun.
- Etiği gözetin — yalnızca herkese açık veriyi toplayın, makul hızda istek gönderin ve yasal riskleri değerlendirin.
Google Shopping fiyat scraping, doğru proxy altyapısı ve dikkatli istek yönetimi ile güvenilir bir rekabet istihbaratı kaynağı olabilir. ProxyHat'ın residential proxy ağı, 190+ ülkede şehir seviyesinde hedefleme ve sticky session desteği ile bu süreci büyük ölçekte mümkün kılar. Mevcut lokasyonları inceleyin ve bugün başlayın.






