← Bloga geri dön

Gizli API ile HTML Ayrıştırma Yerine: Trafiği ve Proxy Tüketimini 10 Kat Nasıl Azaltırsınız

HTML sayfalarının ayrıştırılmasının proxy bütçesini nasıl tükettiğini inceliyoruz ve trafiği 10 kat azaltan gizli API'lere nasıl geçileceğini gösteriyoruz.

📅27 Eylül 2026

Eğer Wildberries, Ozon veya herhangi bir web sitesini tam HTML sayfalarını yükleyerek analiz ediyorsanız, proxy trafiği için 5-10 kat daha fazla ödüyorsunuz demektir. Her bir ürün kartı sayfası, fiyat, stok durumu, puan gibi birkaç alana ihtiyacınız olan 200-800 KB'lık bir yapı, script ve stil içerir. Bu yazıda, bir web sitesinin gizli API'sini nasıl bulacağınızı ve aynı verileri doğrudan, kompakt JSON formatında nasıl alacağınızı inceliyoruz.

Neden HTML analizi proxy trafiğini tüketiyor

Analizci bir sayfayı normal bir HTTP isteği veya headless tarayıcı (Selenium, Puppeteer, Playwright) aracılığıyla yüklediğinde, sunucu tam bir HTML belgesi gönderir: yapı, inline scriptler, stiller, bazen base64 görüntüler ve ihtiyacınız olmayan reklam widget'ları için yüzlerce satır JSON verisi. Wildberries'deki ortalama bir ürün kartı 300-600 KB, Ozon'da ise tüm ilgili kaynaklar (CSS, fontlar, takipçiler) dahil 800 KB'a kadar çıkmaktadır.

Eğer günde 10.000 ürünü 3 proxy oturumu ile izliyorsanız, bu kolayca ayda onlarca gigabayt trafik oluşturur. Yerleşik ve mobil proxyler genellikle trafik başına satılır, bu nedenle her fazladan megabayt doğrudan maliyet demektir. Ancak, ihtiyacınız olan gerçek veriler - fiyat, indirim, stok durumu, puan - JSON yanıtında 1-5 KB yer kaplar. Bir ürün başına 100-200 katlık bir hacim farkı ve tarayıcı renderleme masraflarını dikkate alırsak, zaman ve CPU tasarrufu daha da fazla olur.

HTML analizinin bir diğer sorunu ise kırılganlıktır. Pazar yeri siteleri düzenli olarak tasarımı, CSS sınıflarını, DOM yapısını değiştirir. Her bir değişiklik, XPath veya CSS seçicileri üzerine inşa edilmiş analizciyi bozar. İç API çok daha nadir değişir çünkü mobil uygulamanın ve web sitesinin ön yüzünün çalışması buna bağlıdır.

Gizli API nedir ve nereden gelir

Neredeyse her modern web sitesi bir SPA (Tek Sayfa Uygulaması) veya hibrit bir uygulamadır; burada tarayıcı önce sayfanın "iskeletini" yükler ve ardından JavaScript aracılığıyla iç API'ye gerçek veriler için ek isteklerde bulunur: fiyatlar, stoklar, yorumlar, öneriler. Bu isteklere gizli veya iç API denir - kamuya açık olarak belgelenmemiştir, ancak tarayıcı trafiğinde tamamen açıktır.

Teknik olarak, bu genellikle JSON formatında veri döndüren REST veya GraphQL uç noktalarıdır. Örneğin, Wildberries'de bir ürün kartı card.wb.ru ve wbx-content-v2.wbstatic.net gibi isteklerle yüklenirken, fiyatlar ve stoklar basket-01.wb.ru ve benzeri alanlara ayrı bir istekle gider. Ozon'da benzer bir mantık vardır: ön yüz, mikro hizmetlerden veri toplayan iç composer API'sine erişir.

Önemli olan: böyle bir API kullanmak resmi olarak bir hack değildir - sadece bir kullanıcının normal tarayıcısının yaptığı istekleri tekrarlıyorsunuz. Ancak siteler bu uç noktaları anti-bot sistemleri ile korur, bu nedenle gerçek bir müşterinin davranışını dikkatlice taklit etmek gerekir, bu da kaliteli proxyler kullanmayı içerir.

Gizli API'yi DevTools ile nasıl bulabilirsiniz

İç API'yi tek bir kod satırı yazmadan bulabilirsiniz, Chrome veya Firefox'un yerleşik araçlarını kullanarak. İşte adım adım bir algoritma:

  1. Chrome'da gerekli ürün sayfasını açın, F12'ye basın ve Ağ sekmesine geçin.
  2. İstek filtrelerinde Fetch/XHR türünü seçin - bu, resimlerin, fontların ve statik dosyaların yüklenmesini filtreleyecektir.
  3. Sayfayı yenileyin (F5) ve sayfanın iskeletinin yüklendikten sonra ortaya çıkan isteklerin listesini görün.
  4. Yanıtında (Yanıt sekmesi) ürün fiyatı, adı veya JSON formatında diğer gerekli alanların görünür olduğu isteği bulun.
  5. Bu isteğe tıklayın ve onu cURL olarak kopyalayın (sağ tıklama → Kopyala → cURL olarak kopyala) - bu, size tam başlıklar, çerezler ve parametreler setini verecektir.
  6. URL'deki hangi parametrelerin zorunlu olduğunu (ürün kodu, bölge, API versiyonu) ve hangilerinin veri kaybı olmadan çıkarılabileceğini kontrol edin.

Bundan sonra, bu isteği normal bir HTTP kütüphanesi aracılığıyla tekrarlamak yeterlidir; tüm sayfayı render etmek yerine gerekli ürün kodunu veya ID'sini yerleştirirsiniz. Bu, çoğu pazar yeri için çalışır - Wildberries, Ozon, Avito ve Amazon ile eBay gibi birçok uluslararası platform için de geçerlidir.

Trafik karşılaştırması: HTML vs JSON API

Veri hacmindeki fark o kadar büyüktür ki bunu sayılarla göstermek gerekir. Aşağıda, popüler pazar yerlerinde bir ürün kartı için ortalama ölçümler bulunmaktadır.

Analiz Yöntemi Ortalama Yanıt Boyutu Yükleme Süresi JS renderleme gerekli mi
Selenium ile Tam HTML 400-800 KB 1.5-4 sn Evet
Basit HTTP isteği (requests) 150-300 KB 0.3-0.8 sn Hayır
Gizli JSON API 3-15 KB 0.1-0.3 sn Hayır

Günde 50.000 ürünü izlerken, headless tarayıcıdan doğrudan API isteklerine geçiş, trafiği yaklaşık 30-40 GB'dan ayda 300-700 MB'a düşürmektedir. Bu sadece proxy trafiğinde tasarruf değil, aynı zamanda analizcinin sunucu altyapısındaki yükü azaltma anlamına gelir - daha az CPU renderleme için, daha az bellek, daha hızlı veri toplama.

Python'da pratik örnek

Basitleştirilmiş bir örnek inceleyelim: tam sayfayı yüklemek yerine iç API'ye doğrudan istekle ürün fiyatı ve stok durumunu alma. Bu bir eğitim şablonudur - kesin uç noktalar ve parametreler, belirli bir web sitesi için DevTools aracılığıyla belirlenmelidir, çünkü isteklerin yapısı bölge ve API versiyonuna bağlı olarak değişebilir.

import requests

def get_product_data(product_id: str, proxies: dict = None) -> dict:
    """
    Ürün verilerini tam HTML yerine iç API aracılığıyla alır.
    proxies - requests formatında proxy içeren bir sözlük: {"http": "...", "https": "..."}
    """
    url = f"https://card.example-marketplace.ru/v2/detail"
    params = {
        "nm": product_id,
        "dest": "-1257786",  # bölge, DevTools aracılığıyla belirlenir
        "spp": "0"
    }
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
                       "AppleWebKit/537.36 (KHTML, like Gecko) "
                       "Chrome/120.0 Safari/537.36",
        "Accept": "application/json",
        "Referer": f"https://www.example-marketplace.ru/catalog/{product_id}/detail.aspx"
    }

    response = requests.get(
        url,
        params=params,
        headers=headers,
        proxies=proxies,
        timeout=10
    )
    response.raise_for_status()
    data = response.json()

    product = data["products"][0]
    return {
        "id": product["id"],
        "name": product["name"],
        "price": product["salePriceU"] / 100,
        "stock": product.get("totalQuantity", 0),
        "rating": product.get("reviewRating", None)
    }


if __name__ == "__main__":
    proxy = {
        "http": "http://user:pass@proxy-host:port",
        "https": "http://user:pass@proxy-host:port"
    }
    result = get_product_data("123456789", proxies=proxy)
    print(result)

Bu örnekte üç noktaya dikkat edin. İlk olarak, birçok API'nin isteğin "tarayıcıdan" geldiğini kontrol ettiğinden Referer başlığını belirtiyoruz. İkincisi, kolayca tespit edilebilen requests kütüphanesinin varsayılanı yerine gerçekçi bir User-Agent kullanıyoruz. Üçüncüsü, tüm istek tek bir HTTP çağrısında yer alıyor ve renderleme gerektirmiyor - bu, trafik ve hızda önemli bir kazanç sağlar.

GraphQL uç noktaları için mantık benzerdir, ancak GET parametreleri yerine JSON formatında bir istek gövdesi ile POST isteği gönderirsiniz; burada gerekli alanları açıkça belirtirsiniz - bu, sunucunun yalnızca talep edilen verileri döndürmesi nedeniyle yanıt hacmini daha da azaltır.

API isteklerinde proxy kullanımı

Kompakt JSON formatına geçiş yapsanız bile, yine de proxy'lere ihtiyacınız var - pazar yerleri bir IP'den gelen istek sayısını sınırlar ve anormal etkinlik durumunda yasaklar. Burada doğru proxy türünü seçmek, analizcinin kararlılığını doğrudan etkiler.

Wildberries veya Ozon gibi pazar yerlerinin API'lerini toplu olarak aşmak için veri merkezi proxyleri iyi bir seçimdir - yüksek hız ve düşük trafik maliyeti sağlar, bu da hafif JSON uç noktalarına sık sık istek gönderirken kritik öneme sahiptir. Ancak belirli bir API daha katı bir anti-bot ile korunuyorsa ve veri merkezi alt ağlarını tamamen yasaklıyorsa, yerleşik proxyler kullanmak daha mantıklıdır - bunlar gerçek ev kullanıcılarının IP adreslerini kullanır ve alt ağ bazında yasaklanma olasılığı daha düşüktür.

Mobil uygulamalara bağlı API'ler (bazı Avito uç noktaları veya pazar yerleri yalnızca mobil trafik üzerinden veri döndürür) için mobil proxyler aracılığıyla bağlantı gerekebilir - bunlar gerçek mobil operatörlerin trafiğini taklit eder ve normal IP'leri engelleyen kontrolleri geçer.

Analizcide proxy ayarlarken, istekleri zamanla dağıtmak ve IP rotasyonu kullanmak da önemlidir - tek bir adresten dakikada 1000 kez tekrarlanan kompakt JSON isteği, koruma sistemi tarafından şüpheyle karşılanacaktır. Birkaç proxy oturumundan oluşan bir havuz oluşturun ve yükü bunlar arasında dağıtın, istekler arasında 1-3 saniye rastgele gecikmeler ekleyin.

Sakıncaları: tokenler, imzalar, anti-bot

Gizli API'ler her zaman açık değildir. Bazı siteler, analizciyi oluştururken dikkate almanız gereken ek mekanizmalar ile uç noktalarını korur.

  • Geçici oturum tokenleri - bazı API'ler, daha sonra sonraki isteklerin başlığında iletilen ve sınırlı bir süre (genellikle 5-30 dakika) geçerli olan bir token için önceden bir istek gerektirir.
  • İstek imzası (signature) - istek parametreleri, sayfanın JS kodundan gizli bir anahtar ile istemci tarafında hashlenir. Bu imzayı ya manuel olarak, algoritmayı çözerek yeniden üretmek ya da token alımı aşamasında yalnızca headless tarayıcı ile gerçekleştirmek ve sonrasında doğrudan hafif istekler göndermek gerekir.
  • IP ve User-Agent başına oran sınırlaması - istek sıklığı aşıldığında, site geçici olarak erişimi engeller. Proxy rotasyonu ve mantıklı gecikmeler ile çözülür.
  • Başlık parmak izi - bazı sistemler, başlıkların tam setini (sıra, Accept-Language, Sec-Fetch-* varlığı) kontrol eder ve "tam olmayan" bir set ile gelen istekleri engeller; bu da genellikle scriptler için karakteristik bir durumdur, tarayıcılar için değil.
  • Verilerin coğrafi bağımlılığı - pazar yerlerindeki fiyatlar ve stoklar bölgelere göre farklılık gösterebilir, bu nedenle istekte doğru bölge/depoya ait parametreyi iletmek önemlidir, aksi takdirde veriler alakasız olacaktır.

Eğer API, yeniden üretmesi zor olan bir istek imzası ile kapatılmışsa, uzlaşmacı bir seçenek - yalnızca ağ isteklerini yakalamak ve hazır JSON yanıtını çıkarmak için headless tarayıcı (Playwright, Puppeteer) kullanmaktır; DOM'u analiz etmeden. Bu, doğrudan bir HTTP isteğinden daha yavaş olsa da, yine de sayfa tasarımının tam analizinden daha hızlı ve daha kolaydır.

Analizciyi başlatmadan önce kontrol listesi

  • DevTools ile uç nokta bulundu, cURL olarak kopyalandı ve Postman veya requests ile test edildi.
  • Zorunlu istek parametreleri (ürün ID'si, bölge, API versiyonu) belirlendi ve gereksiz olanlar çıkarıldı.
  • User-Agent, Referer ve Accept-Language başlıkları gerçekçi bir şekilde ayarlandı.
  • Oturum tokeni veya istek imzası gerekip gerekmediği kontrol edildi ve bunların nasıl alınacağı düşünülmelidir.
  • Proxy rotasyonu ve istekler arasındaki rastgele gecikmeler ayarlandı.
  • Belirli bir sitenin korumasına uygun proxy türü seçildi - veri merkezi, yerleşik veya mobil.
  • Otomatik olarak başka bir proxy'ye geçiş yapacak şekilde 429 ve 403 hata işleme eklendi.
  • Gerçek tasarrufu kontrol etmek için trafik hacminin kaydedilmesi ayarlandı.

Sonuç

Tam HTML analizinden gizli API ile çalışmaya geçiş, yalnızca teknik bir optimizasyon değil, aynı zamanda proxy trafiği ve altyapı maliyetlerini doğrudan azaltmaktır. Yüzlerce kilobayt gereksiz yapıyı yüklemek yerine, fiyat, stok veya puan izlemek için gereken alanları içeren kompakt bir JSON alıyorsunuz. Ek bir avantaj - analizcinin web sitesinin tasarımındaki değişikliklere karşı dayanıklılığı, çünkü iç API'ler genellikle ön yüzlerden daha nadir değişir.

Ancak API'yi bulma yöntemi, kaliteli proxy'lere olan ihtiyacı ortadan kaldırmaz - pazar yerlerinin anti-bot sistemleri, HTML isteklerini ve JSON uç noktalarına yapılan çağrıları aynı dikkatle izler. Wildberries veya Ozon'u büyük hacimlerde izliyorsanız, maliyetleri azaltmak için hızlı veri merkezi proxyleri ile başlayın ve yasaklama belirtileri gördüğünüzde daha kararlı bir analizci çalışması için yerleşik veya mobil IP havuzlarına geçin.