2026'da Best Buy fiyatları ve stoku nasıl kazınır? Bu soru, e-ticaret fiyat izleme ve envanter takibi yapan mühendislerin en sık karşılaştığı teknik problemdir. Best Buy'ın resmi Products API üyelik onayı gerektirir ve API anahtarlarını sıkı oran sınırlarına tabi tutar; bu yüzden canlı fiyatlar ve mağaza seviyesinde stok durumu genellikle doğrudan web sitesinden kazınmalıdır. Bu rehberde, Best Buy'ın anti-bot savunmasını anlamaktan Python ile çalışan bir kazıma hattı kurmaya kadar tüm adımları ele alıyoruz.
2026'da Best Buy Fiyatları ve Stoku Kazıma: API mi HTML mi?
Best Buy, geliştiriciler için resmi bir Products API sunar. Ancak bu API'ye erişim ön onay gerektirir ve onaylandıktan sonra bile istek oranları sınırlıdır. Üstelik API, mağaza seviyesinde stok durumu (in-store availability) için doğrudan bir endpoint sağlamaz; bu veri yalnızca web arayüzü üzerinden, ZIP kodu bazlı sorgulamalarla görünür hale gelir.
| Yaklaşım | Avantajlar | Dezavantajlar |
|---|---|---|
| Resmi Products API | Yapılandırılmış JSON, yasal olarak güvenli, yüksek oran limitleri (onaylı anahtar başına saniyede ~5 istek) | Üyelik onayı gerekir, mağaza stok verisi yok, fiyat gecikmeleri olabilir |
| HTML / JSON endpoint kazıma | Mağaza seviyesi stok, canlı fiyat, kategori tarama; onay gerekmez | Akamai Bot Manager ile karşılaşırsınız, proxy ve oturum yönetimi gerekir |
Pratik sonuç: Eğer yalnızca ürün kataloğu ve temel fiyat verisi gerekiyorsa ve API onayınız varsa, resmi API yeterli olabilir. Ancak mağaza seviyesinde stok takibi veya canlı fiyat değişikliklerini izleme gerekiyorsa, web kazıma kaçınılmazdır.
Best Buy'ın Anti-Bot Teknolojisi: Akamai Bot Manager
Best Buy, Akamai Bot Manager kullanır. Bu sistem, tarayıcı parmak izi (browser fingerprinting), JavaScript sensor verisi ve davranışsal analiz ile botları tespit eder. İki temel çerez bu süreci yönetir:
_abck: Akamai'nin sensor doğrulama çerezi. Bu çerez, tarayıcının JavaScript motorundan toplanan sensor verisi ile üretilir. Eğer sensor verisi geçerli değilse,_abckçerezi "challenge" modunda kalır ve sonraki istekler 403 döndürür.bm_sz: Bot Manager'ın oturum takip çerezi. Bu çerez, IP ve tarayıcı parmak izini birleştirerek bot puanı hesaplar.
Datacenter IP'leri genellikle ilk birkaç istek içinde Akamai tarafından challenge'a düşer. Bunun nedeni, datacenter IP bloklarının Akamai'nin itibar veritabanında düşük puana sahip olmasıdır. Bu yüzden Best Buy kazıma işlemleri için ABD yerleşik residential proxy'ler şarttır.
Akamai'nin sensor çerezi
_abck, JavaScript çalıştıran gerçek bir tarayıcı ortamı gerektirir.requestsgibi basit HTTP kütüphaneleri bu çerezi geçerli şekilde üretemez; bu yüzdencurl_cffiveya Playwright gibi araçlar tercih edilir.
URL Desenleri ve Seçiciler
Ürün (SKU) Sayfaları
Best Buy ürün sayfaları şu deseni izler:
https://www.bestbuy.com/site/<urun-slug>/<sku>.p?skuId=<sku>
Örnek: https://www.bestbuy.com/site/sony-wh-1000xm5-wireless-noise-canceling-headphones-black/6487508.p?skuId=6487508
Fiyat ve Başlık Seçicileri
Sayfa HTML'inde fiyat ve ürün başlığı şu CSS seçicilerinde bulunur:
- Fiyat:
.priceView-customer-price— içinde$işareti ile fiyat metni yer alır. - Ürün başlığı:
.sku-titleveya.sku-title h1— ürün adını içerir.
XPath alternatifleri:
//div[contains(@class, 'priceView-customer-price')]//text()
//h1[contains(@class, 'sku-title')]/text()
Stok ve Fiyat JSON Endpoint'leri
Best Buy, mağaza stok durumu için dahili bir endpoint kullanır. Bu endpoint, SKU ID ve ZIP kodu ile sorgulanır:
https://www.bestbuy.com/fulfillment/storepickup/v2/sku/<skuId>?postalCode=<zip>
Ayrıca fiyat için:
https://www.bestbuy.com/productfulfillment/cmm/v2/skus/<skuId>/fulfillment?context=selectview&zip=<zip>
Bu endpoint'ler JSON döndürür ve HTML parse etme ihtiyacını azaltır. Ancak yine de Akamai challenge'ına tabidir.
Örnek JSON Yanıtı (Kısaltılmış)
{
"sku": "6487508",
"price": 329.99,
"inStoreAvailability": true,
"stores": [
{
"storeId": "0028",
"name": "Chicago Loop",
"stock": 3,
"distance": 1.2
}
]
}
Neden ABD Residential Proxy ve Şehir Geosu Gerekli?
Best Buy'ın mağaza stok durumu konuma göre değişir. Bir ürün Chicago'da stokta varken Miami'de tükenmiş olabilir. Bu yüzden stok sorgulamaları her ZIP kodu için ayrı ayrı yapılmalı ve her sorgu o bölgeye yakın bir IP'den gelmelidir.
ProxyHat ile şehir seviyesinde geo-targeting yapabilirsiniz:
http://user-country-US-city-chicago:pass@gate.proxyhat.com:8080
http://user-country-US-city-miami:pass@gate.proxyhat.com:8080
http://user-country-US-city-dallas:pass@gate.proxyhat.com:8080
Bu şekilde, her şehir için ayrı bir sticky session oluşturarak o bölgenin stok verisini çekersiniz. Datacenter proxy'ler ise Akamai tarafından hızlıca engellenir ve mağaza stok sorguları başarısız olur.
Python ile Best Buy Kazıma: Çalışan Örnek
Aşağıdaki örnek, curl_cffi kütüphanesini kullanarak Akamai'nin TLS parmak izini taklit eder ve ProxyHat residential proxy'leri ile Best Buy'dan fiyat/stok verisi çeker.
import json
import time
from curl_cffi import requests
PROXY = "http://user-country-US-city-chicago:pass@gate.proxyhat.com:8080"
SKU = "6487508"
ZIP = "60601"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
"Accept": "application/json",
"Accept-Language": "en-US,en;q=0.9",
}
# 1. Önce ürün sayfasını ziyaret et — _abck çerezini topla
session = requests.Session(impersonate="chrome120")
session.proxies = {"http": PROXY, "https": PROXY}
product_url = f"https://www.bestbuy.com/site/product/{SKU}.p?skuId={SKU}"
resp = session.get(product_url, headers=headers, timeout=15)
print(f"Ürün sayfası: {resp.status_code}")
# 2. Stok ve fiyat JSON endpoint'ini sorgula
fulfillment_url = (
f"https://www.bestbuy.com/productfulfillment/cmm/v2/skus/{SKU}/fulfillment"
f"?context=selectview&zip={ZIP}"
)
resp2 = session.get(fulfillment_url, headers=headers, timeout=15)
print(f"Fulfillment: {resp2.status_code}")
if resp2.status_code == 200:
data = resp2.json()
print(json.dumps({
"sku": data.get("sku"),
"price": data.get("price"),
"inStoreAvailability": data.get("inStoreAvailability"),
}, indent=2))
else:
print("Akamai challenge veya rate limit — backoff uygula")
time.sleep(5)
Node.js ile Basit Alternatif
const fetch = require('node-fetch');
const proxy = 'http://user-country-US-city-chicago:pass@gate.proxyhat.com:8080';
const sku = '6487508';
const zip = '60601';
const url = `https://www.bestbuy.com/productfulfillment/cmm/v2/skus/${sku}/fulfillment?context=selectview&zip=${zip}`;
fetch(url, {
headers: {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
'Accept': 'application/json',
},
agent: new HttpsProxyAgent(proxy),
})
.then(r => r.json())
.then(d => console.log(d.sku, d.price, d.inStoreAvailability))
.catch(e => console.error('Hata:', e.message));
curl ile Hızlı Test
curl -x http://user-country-US-city-chicago:pass@gate.proxyhat.com:8080 \
-H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" \
-H "Accept: application/json" \
"https://www.bestbuy.com/productfulfillment/cmm/v2/skus/6487508/fulfillment?context=selectview&zip=60601"
Oturum Yönetimi, Backoff ve Kategori Tarama
ZIP Bazlı Sticky Session Rotasyonu
Her ZIP kodu için ayrı bir sticky session kullanın. Bu, Akamai'nin oturum tutarlılığını algılamasına yardımcı olur ve aynı IP'den gelen ardışık istekleri doğal gösterir.
zips = ["60601", "10001", "90001", "75201", "33101"]
for zip_code in zips:
session_id = f"bb-{zip_code}"
proxy = f"http://user-country-US-session-{session_id}:pass@gate.proxyhat.com:8080"
session.proxies = {"http": proxy, "https": proxy}
# fulfillment sorgusu yap...
403 ve Akamai Challenge'ında Backoff
Akamai challenge aldığınızda (genellikle 403 veya 429 yanıtı), exponential backoff uygulayın:
import time
def fetch_with_backoff(session, url, max_retries=5):
for attempt in range(max_retries):
resp = session.get(url, timeout=15)
if resp.status_code == 200:
return resp.json()
wait = 2 ** attempt + (attempt * 0.5)
print(f"Deneme {attempt+1}: {resp.status_code}, {wait:.1f}s bekleniyor")
time.sleep(wait)
return None
Tipik backoff süreleri: ilk denemeden sonra 2 saniye, ikinciden sonra 4 saniye, üçüncüden sonra 8 saniye. 5 denemeden sonra başarısız olursa, o oturumu terk edin ve yeni bir session ID ile devam edin.
Kategori Sayfalarında Sayfalama
Best Buy kategori sayfaları ?cp=<sayfa> parametresi ile sayfalanır:
https://www.bestbuy.com/site/audio/headphones/abcat0204001.c?id=abcat0204001&cp=2
Her sayfada ~24 ürün kartı bulunur. Kategori taraması sırasında her sayfa için yeni bir request session kullanın ve sayfalar arasında 2-3 saniye bekleme uygulayın. Bu, doğal gezinme davranışına daha yakın olur.
Yaygın Hatalar ve Sınır Durumları
- Akılsız rate limit: Saniyede 50+ istek göndermek, Akamai'nin otomatik engellemesini tetikler. Hedef oran: saniyede 2-3 istek, oturum başına.
- Tek IP ile tüm ZIP kodlarını sorgulamak: Chicago IP'si ile Miami stok sorgusu yapmak tutarsız veri döndürebilir. Her şehir için o şehre yakın bir IP kullanın.
- JavaScript sensor'i yok saymak:
requestskütüphanesi_abckçerezini geçerli şekilde üretemez.curl_cffiveya Playwright kullanın. - Fiyat dalgalanması: Best Buy fiyatları gün içinde değişebilir. En az 4 saatte bir güncelleme yapın.
- Stok durumu yanıltıcı: "In stock" bazen yalnızca online stok anlamına gelir. Mağaza stoku için
inStoreAvailabilityalanını doğrulayın.
ProxyHat Kurulumu ve İç Bağlantılar
Best Buy kazıma hattınızı kurmak için ProxyHat'ın residential proxy ağını kullanabilirsiniz. Fiyatlandırma sayfasından uygun planı seçin, ardından lokasyonlar sayfasından ABD şehir seviyesinde erişilebilir bölgeleri kontrol edin.
Teknik dokümantasyon için ProxyHat Docs adresini ziyaret edin. Web kazıma ve SERP takibi kullanım senaryoları için sırasıyla web kazıma ve SERP takibi sayfalarına bakabilirsiniz.
ProxyHat bağlantı detayları:
| Parametre | Değer |
|---|---|
| Gateway | gate.proxyhat.com |
| HTTP port | 8080 |
| SOCKS5 port | 1080 |
| Geo-targeting | user-country-US-city-chicago |
| Sticky session | user-session-bb-60601 |
Etik ve Yasal Hususlar
Best Buy kazıma işlemi uygularken şu sınırlara dikkat edin:
- Yalnızca herkese açık katalog/fiyat verisi: Giriş yapmadan erişilebilen ürün sayfaları ve fiyat bilgileri kazınabilir. Hesap gerektiren veriler (kişisel sipariş geçmişi, ödeme bilgileri) kazınmamalıdır.
- Hesap veya ödeme otomasyonu yok: Otomatik sepete ekleme, checkout veya ödeme akışları Best Buy'ın Kullanım Şartları'nı ihlal eder.
- CFAA ve GDPR: ABD'de Computer Fraud and Abuse Act (CFAA) ve Avrupa'da GDPR, yetkisiz veri toplama konusunda sınırlamalar getirir. Yalnızca herkese açık veriyi topladığınızdan emin olun.
- robots.txt kontrolü: Best Buy'ın
robots.txtdosyasını inceleyin; engellenen yollara istek göndermeyin. - Resmi API yeterli olduğunda onu kullanın: Eğer yalnızca ürün kataloğu ve temel fiyat gerekiyorsa, API onayı almak hem yasal olarak daha güvenli hem de teknik olarak daha az kırılgandır.
Temel Çıkarımlar
- Best Buy'ın resmi Products API onay gerektirir ve mağaza stok verisi sağlamaz; web kazıma çoğu kullanım senaryosu için gereklidir.
- Akamai Bot Manager (
_abck,bm_sz) datacenter IP'leri ilk birkaç istekte engeller; ABD residential proxy'ler şarttır.- Mağaza stoku konuma göre değişir; şehir seviyesinde geo-targeting (
-country-US-city-chicago) kullanın.curl_cffiile Akamai TLS parmak izini taklit edin;requeststek başına yetersizdir.- Her ZIP için ayrı sticky session, exponential backoff ve saniyede 2-3 istek oranı güvenilir kazıma için yeterlidir.
- Etik sınırlar: yalnızca herkese açık veri, hesap/checkout otomasyonu yok, robots.txt'a uyum.
SSS
Best Buy fiyat ve stok kazıma nedir?
Best Buy fiyat ve stok kazıma, Best Buy web sitesinden ürün fiyatları, mağaza seviyesinde stok durumu ve ürün bilgilerini otomatik olarak toplama işlemidir. Resmi Products API onay gerektirdiği ve mağaza stok verisi sağlamadığı için, bu veriler genellikle web kazıma ile HTML veya dahili JSON endpoint'leri üzerinden çekilir.
Bu işlem proxy kullanıcıları için neden önemlidir?
Best Buy Akamai Bot Manager kullanır ve datacenter IP'leri ilk birkaç istekte engeller. Residential proxy'ler, gerçek ev interneti IP'leri olarak Akamai'nin itibar kontrolünden geçer. Ayrıca mağaza stoku konuma göre değiştiği için, şehir seviyesinde geo-targeting yapabilen bir proxy servisi olmadan doğru stok verisi elde edilemez.
Best Buy kazıma için hangi proxy tipi en iyisidir?
ABD yerleşik residential proxy'ler en iyi sonucu verir. Datacenter proxy'ler Akamai tarafından hızlıca engellenir. Mobile proxy'ler de çalışabilir ancak maliyetleri daha yüksektir. Şehir seviyesinde geo-targeting (örneğin -country-US-city-chicago) destekleyen residential proxy'ler, mağaza stok sorguları için idealdir.
Best Buy kazıma sırasında engellenmekten nasıl kaçınılır?
Engellenmemek için: (1) curl_cffi veya Playwright ile gerçek tarayıcı parmak izi taklit edin; (2) her ZIP kodu için ayrı sticky session kullanın; (3) saniyede 2-3 istek oranını aşmayın; (4) 403/429 yanıtlarında exponential backoff uygulayın; (5) ABD residential proxy'ler ile şehir geo-targeting yapın; (6) her oturumda önce ürün sayfasını ziyaret edip _abck çerezini toplayın.
Best Buy'ın resmi API'si ne zaman yeterli olur?
Eğer yalnızca ürün kataloğu, temel ürün bilgileri ve yaklaşık fiyat verisi gerekiyorsa ve mağaza seviyesinde stok takibi yapmanız gerekmiyorsa, resmi Products API yeterli olabilir. API onayı almak genellikle birkaç gün sürer ve onaylı anahtar başına saniyede yaklaşık 5 istek oran limiti sunar. Canlı fiyat değişiklikleri veya mağaza stoku gerekiyorsa web kazıma kaçınılmazdır.






