2026'da Shein'i Ölçekli Kazıma: API mi HTML mi?
Shein, dünyanın en hızlı büyüyen hızlı moda platformlarından biri ve 2026 itibarıyla kataloğunda milyonlarca SKU barındırıyor. Fiyat-zeka ekipleri, moda analistleri ve trend takipçileri için 2026'da Shein'i ölçekli kazıma kritik bir yetkinlik haline geldi. Ancak Shein'in anti-bot altyapısı son derece agresif ve doğru yaklaşımı seçmezseniz ilk 50 istekte banlanırsınız.
İlk karar vermeniz gereken şey veri kaynağıdır: tarayıcıda render edilmiş HTML'i ayrıştırmak mı, yoksa Shein'in dahili JSON API uç noktalarına doğrudan istek atmak mı? Her ikisinin de avantajları var:
- HTML kazıma: Sayfa yapısına bağlı, daha kırılgan, ancak herhangi bir kimlik doğrulama gerektirmez ve görsel olarak görünen veriyi yakalar.
- JSON API kazıma:
/api/productInfoveya ürün-liste uç noktaları yapılandırılmış veri döndürür, daha az ayrıştırma gerekir, ancak Akamai'nin_abckvebm_szçerezlerini doğru şekilde ele almanız gerekir.
Pratikte, ölçekli çalışmada çoğu ekip hibrit kullanır: liste sayfaları için kategori-feed uç noktalarını, ürün detayı için /api/productInfo'yu çağırır. HTML render, yalnızca JSON uç noktası bozulduğunda yedek olarak işe yarar. Bu rehberde her iki yolu da ele alacağız.
Shein'in Anti-Bot Yığını: Akamai Bot Manager
Shein, Akamai Bot Manager kullanıyor ve bu, sektörün en olgun bot-detection sistemlerinden biri. Akamai'nin koruması üç temel bileşene dayanır:
_abck çerezi ve bm_sz
Akamai, tarayıcıda çalışan bir JavaScript sensörü aracılığıyla _abck çerezini oluşturur. Bu çerez, tarayıcının TLS parmak izini, canvas hash'ini, font listesini, WebGL renderer bilgisini ve fare/klavye telemetrisini içeren sensor_data paketini doğrular. bm_sz ise bot-yönetim oturumunu takip eder. Eğer _abck çerezi geçerli bir sensör imzası içermiyorsa, Akamai sessizce 403 veya 412 Precondition Failed döndürür.
smdeviceid device token
Shein ayrıca smdeviceid adlı bir cihaz token'ı enjekte eder. Bu, kalıcı bir cihaz tanımlayıcısıdır ve Akamai'nin sensör verisiyle çapraz doğrulanır. Aynı smdeviceid'yi farklı IP'lerden tekrar tekrar kullanmak, bot sinyali olarak işaretlenir.
Neden headless Chrome tek başına yetersiz
Standart Puppeteer veya Selenium kurulumu, Akamai'ye genellikle yakalanır. Nedeni basit: headless Chrome'un TLS parmak izi ve navigator.webdriver flag'i normal kullanıcıdan ayrılır. Akamai, Sec-CH-UA başlığındaki headless ipuçlarını, PerfomanceNow timing sapmasını ve canvas render farklarını algılar. 2026'da yalnızca stealth eklentisi bile yeterli değil; TLS parmak izini gerçek tarayıcıyla eşleştiren kütüphaneler (ör. curl_cffi veya tls-client) kullanmanız gerekir.
Pratik ders: Headless Chrome'u yalnızca _abck çerezini bir kez üretmek için kullanın, ardından bu çerezi lightweight HTTP istemcisiyle JSON API'ye taşıyın. Bu hibrit yaklaşım, saatte 10x daha fazla istek hacmi sağlar.
Veri Konumu: JSON Blob'ları ve Uç Noktalar
Shein sayfaları veriyi iki yerde saklar. Hangisini kullanacağınız, ihtiyacınıza bağlı.
Ürün detay sayfası: productIntroData / gbProductDetail
Ürün detay sayfasının HTML'inde <script> etiketleri içinde iki JSON blob gömülüdür:
window.productIntroData— ürün başlığı, açıklama, renk seçenekleri, beden matrisi.window.gbProductDetail— fiyat, indirim, SKU listesi, stok durumu.
Bu blob'ları regex veya HTML ayrıştırıcıyla çıkarabilirsiniz. Ancak daha temiz yol, aynı veriyi yapılandırılmış döndüren dahili API'yi çağırmaktır.
/api/productInfo uç noktası
Ürün detayı için Shein şu tarz bir uç nokta kullanır:
https://www.shein.com/api/productInfo?goods_id=12345678&cat_id=2076
Burada goods_id ürünün benzersiz kimliği, cat_id ise kategori kimliğidir. Yanıt, retailPrice, salePrice, stock, skuList ve çoklu para birimi alanlarını içeren bir JSON nesnesidir.
Kategori feed uç noktaları
Liste kazıma için Shein, /api/products tarzı uç noktalar sunar. Tipik parametreler:
https://www.shein.com/api/products/search?
cat_id=2076
&page=1
&page_size=40
&sort=popular
¤cy=USD
&country=US
Bu uç nokta, ürün başlığı, fiyat, görsel URL ve goods_id listesi döndürür. Her goods_id için ayrı bir /api/productInfo çağrısı yaparak tam stok ve SKU verisi alırsınız.
Rate Limitler ve Neden Coğrafi Hedefli Residential Proxy Gerekli
Shein, IP başına yaklaşık 50–80 istek/dakika eşik değerine ulaştığında Akamai'ye flag atar. Bu eşik, bölgeye ve trafik desenine göre değişir ancak tek bir veri merkezi IP'siyle ölçekli kazıma pratik değildir. Daha da kritik olan: Shein, lokasyona göre para birimi, fiyat ve stok durumunu yerelleştirir. ABD IP'siyle çekilen bir ürünün fiyatı, Almanya IP'siyle çekilen aynı üründen farklı olabilir — hem değer hem de bazen mevcudiyet açısından.
Bu yüzden coğrafi hedefli residential proxy'ler zorunludur. ProxyHat ile ülke ve şehir seviyesinde hedefleme yapabilirsiniz:
http://user-country-US:pass@gate.proxyhat.com:8080
http://user-country-DE-city-berlin:pass@gate.proxyhat.com:8080
ABD fiyat verisi için -country-US, AB karşılaştırması için -country-DE veya -country-FR kullanın. Her ülke için ayrı bir IP havuzu, yerel para birimi ve yerel stok görünümü sağlar.
| Proxy Tipi | Hız | Tespit Riski | Shein için Uygunluk |
|---|---|---|---|
| Datacenter | Yüksek (<100ms) | Çok yüksek | Yalnızca düşük hacimli test |
| Residential (rotasyon) | Orta (~200–500ms) | Düşük | Liste ve fiyat kazıma |
| Residential (sticky session) | Orta | Düşük | Para-birimi tutarlılığı için ideal |
| Mobile | Değişken | Çok düşük | Yüksek güvenlikli uç noktalar |
Çalışan Python Örneği: curl_cffi + ProxyHat
Aşağıdaki örnek, TLS parmak izini gerçek Chrome ile eşleştirmek için curl_cffi kullanır ve ProxyHat residential proxy üzerinden Shein'in /api/productInfo uç noktasını çağırır.
from curl_cffi import requests
import json
PROXY = "http://user-country-US:pass@gate.proxyhat.com:8080"
HEADERS = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
"AppleWebKit/537.36 (KHTML, like Gecko) "
"Chrome/124.0.0.0 Safari/537.36",
"Accept": "application/json, text/plain, */*",
"Accept-Language": "en-US,en;q=0.9",
"Referer": "https://www.shein.com/",
}
def fetch_product(goods_id, cat_id):
url = "https://www.shein.com/api/productInfo"
params = {"goods_id": goods_id, "cat_id": cat_id}
r = requests.get(
url,
params=params,
headers=HEADERS,
proxies={"http": PROXY, "https": PROXY},
impersonate="chrome124",
timeout=20,
)
if r.status_code == 412:
# _abck yenileme gerekli — yeni IP ile tekrar dene
raise RuntimeError("Akamai challenge; yeni session gerekli")
return r.json()
data = fetch_product(goods_id=28475921, cat_id=2076)
print(json.dumps(data.get("info", {}).get("goods", {}), indent=2)[:600])
Kısaltılmış örnek yanıt:
{
"goods_id": "28475921",
"goods_name": "Ribbed Knit Bodycon Dress",
"retailPrice": {"amount": "32.00", "currency": "USD"},
"salePrice": {"amount": "19.99", "currency": "USD"},
"stock": 1842,
"skuList": [
{"skuCode": "SKU-A1", "color": "black", "size": "S", "stock": 210},
{"skuCode": "SKU-A2", "color": "black", "size": "M", "stock": 0}
],
"cat_id": "2076",
"country": "US"
}
Bu yanıt, fiyat-zeka ekiplerinin ihtiyaç duyduğu üç temel alanı içerir: retailPrice, salePrice ve stock. SKU seviyesi stok, hangi bedenin tükendiğini gösterir — trend analizi için değerli bir sinyal.
Pagination, Sticky Session ve 412 Yenileme
Pagination stratejisi
Kategori feed uç noktaları page ve page_size parametreleriyle sayfalanır. Tipik bir kategori 20–60 sayfa içerir. Her sayfa için yeni bir proxy IP'si kullanın:
for page in range(1, 60):
sess_id = f"shein-cat-{page}"
proxy = f"http://user-country-US-session-{sess_id}:pass@gate.proxyhat.com:8080"
# ... istek at, parse et, 1–3 saniye bekle
Para-birimi tutarlılığı için sticky session
Aynı ürünün farklı sayfalardaki fiyatını karşılaştırırken, her istekte IP değişirse para birimi tutarsızlığı oluşabilir. -session- flag'i ile aynı IP'yi 10–30 dakika boyunca sabit tutun:
http://user-country-US-session-shein-prod-28475921:pass@gate.proxyhat.com:8080
Bu, ProxyHat'ın o session ID'si için aynı residential IP'yi yeniden atamasını sağlar. Fiyat verisi tek bir para biriminde ve tek bir lokasyondan gelir.
412 ve _abck yenileme mantığı
Akamai, bir IP'nin sensör imzası geçersizleştiğinde 412 Precondition Failed döndürür. Bu, _abck çerezinin yenilenmesi gerektiği anlamına gelir. Pratik akış:
- 412 al → mevcut session'ı terk et.
- Yeni bir ProxyHat IP'si talep et (yeni
-session-ID). - İsteği 2–5 saniye eksponansiyel backoff ile tekrar dene.
- 3 denemeden sonra başarısız olursa, IP'yi kara listeye al ve sıradakine geç.
Tipik bir ölçekli kazıma işinde başarı oranı %85–92 bandında tutulabilir; kalan %8–15'ü yeniden kuyruğa almak sağlıklı bir stratejidir.
Etik, Yasal ve TOS Açısından
Shein kazıma, teknik olarak mümkün olsa da yasal sınırlar içinde kalmak zorundadır. Birkaç temel kural:
- Yalnızca herkese açık ürün verisi: Fiyat, stok, başlık, kategori — bunlar herkese açıktır. Hesap verisi, ödeme bilgisi veya kişisel veri kazımayın.
- checkout veya hesap erişimi yok: Sepete ekleme, sipariş verme veya kullanıcı girişi içeren akışları otomatikleştirmeyin; bu, CFAA kapsamında risk yaratır.
- GDPR ve kişisel veri: Ürün yorumları kullanıcı tarafından üretilmiş içerik içerir; yorum metnini kişisel veri olarak işleyebilirsiniz. AB kullanıcıları için GDPR uyumu gerekir.
- robots.txt ve TOS: Shein'in
robots.txt'sini kontrol edin; bazı yollarDisallow edilmiş olabilir. TOS'u ihlal etmek, hesap askıya alma ve hukuki risk doğurur. - Affiliate feed alternatifi: Eğer yalnızca fiyat ve ürün verisi gerekiyorsa, Shein'in resmi affiliate programı veya API ortaklığı daha güvenli bir yol olabilir. Yüksek hacimli ticari kullanımda önce resmi kanalları deneyin.
Etik kural: Herkese açık veriyi makul hızda, kişisel veri olmadan ve ticari zarar vermeyecek şekilde çekin. Rakip fiyat-zeka için günde birkaç bin istek çoğu durumda yeterlidir; milyonlarca istek gerekmez.
ProxyHat Kurulumu ve İç Kaynaklar
ProxyHat, Shein kazıma için üç proxy tipi sunar: residential (rotasyon ve sticky), mobile ve datacenter. Shein için residential'ı ana, mobile'ı yedek olarak kullanmanızı öneririz. Kurulum detayları için ProxyHat dokümantasyonuna bakın.
- ProxyHat fiyatlandırması — residential ve mobile planları.
- Web kazıma kullanım senaryosu — genel en iyi pratikler.
- SERP takibi — benzer anti-bot zorlukları.
- Proxy lokasyonları — ülke ve şehir seviyesi hedefleme.
Key Takeaways
- Shein'de JSON API uç noktaları (
/api/productInfo, kategori feed) HTML'den daha verimlidir; HTML yedek olarak kalsın. - Akamai Bot Manager (
_abck,bm_sz,smdeviceid) nedeniyle standart headless Chrome yetersizdir; TLS parmak izi eşleştirencurl_cffigibi araçlar kullanın. - Tek IP başına ~50–80 istek/dakika eşiği aşılınca ban gelir; residential rotasyon zorunlu.
- Shein fiyatı ve stoğu lokasyona göre yerelleştirir;
-country-US,-country-DEile coğrafi hedefleme yapın. - Para-birimi tutarlılığı için
-session-ID'leri kullanın; 412'de yeni IP ve backoff ile yeniden deneyin. - Yalnızca herkese açık veriyi çekin; checkout, hesap veya kişisel veriye dokunmayın; resmi affiliate feed'i değerlendirin.






