Her bir ekstra megabayt tarayıcı trafiği, ya bir proxy sağlayıcısına ödeme ya da limitlere takılma ve IP'nin yasaklanma riski demektir. Eğer Wildberries, Ozon'dan fiyat topluyorsanız veya yüzlerce proxy adresi üzerinden Avito'daki ilanları izliyorsanız, trafik tasarrufu doğrudan projenizin bütçesini etkiler. Bu makalede, iletilen veri miktarını 4-5 kat azaltan, aynı zamanda çıkarılan bilgilerin bütünlüğünü ve doğruluğunu koruyan belirli teknik yöntemler bulunmaktadır.
Neden tarayıcı trafiği bütçeyi etkiliyor
Çoğu proxy sağlayıcısı, konut ve mobil proxyleri, kullanılan süreye değil, iletilen gigabayt miktarına göre fiyatlandırır. Eğer tarayıcınız Wildberries ürün sayfasını tamamen yüklüyorsa — resimlerle, öneri scriptleriyle, analiz izleyicileriyle ve fontlarla — her bir kart için 2-3 MB ödüyorsunuz, oysa gerçekte sadece 15-20 KB metin gerekiyor: isim, fiyat, puan, stok durumu.
Günde 50.000-100.000 kart yüklemesi yapıldığında, "her şeyi yükle" ile "sadece gerekli olanı yükle" arasındaki fark, her gün on binlerce gigabayt fazla trafik anlamına gelir. Bu sadece proxy maliyetleri değil, aynı zamanda hedef site üzerindeki yükü artırır, bu da bot koruma sistemine takılma ve CAPTCHA veya geçici IP yasaklama olasılığını artırır. Trafik optimizasyonu, aynı zamanda para tasarrufu ve yasaklanma riskini azaltma anlamına gelir.
Üçüncü bir etki de var: bir istekte iletilen veri miktarı ne kadar azsa, istek o kadar hızlı gerçekleşir. Bu, daha fazla akış başlatmanıza olanak tanır; aynı sayıda proxy ile hız limitlerini aşmadan daha fazla iş parçacığı çalıştırabilirsiniz, bu da Dolphin Anty veya AdsPower gibi anti-tespit tarayıcılarıyla oturumlarla çalışırken önemlidir.
Yöntem 1: Resimleri, CSS ve fontları engelleme
Eğer tarayıcı headless (Playwright, Puppeteer, Selenium) üzerinden çalışıyorsa, trafiği 2-3 kat azaltmanın en hızlı yolu, DOM'daki verilere etki etmeyen statik kaynakların yüklenmesini engellemektir. Ürün resimleri, web sitesinin fontları, videolar ve CSS stilleri sayfanın ağırlığının %70'ine kadarını kaplayabilir, ancak metin ve niteliklerin çıkarılmasında hiçbir şekilde yer almaz.
from playwright.sync_api import sync_playwright
def block_heavy_resources(route, request):
if request.resource_type in ["image", "media", "font", "stylesheet"]:
route.abort()
else:
route.continue_()
with sync_playwright() as p:
browser = p.chromium.launch(headless=True)
page = browser.new_page()
page.route("**/*", block_heavy_resources)
page.goto("https://example.com/product/123")
html = page.content()
browser.close()
Benzer bir mantık, Puppeteer'da page.setRequestInterception(true) ve Selenium'da Chrome profil ayarıyla profile.managed_default_content_settings.images: 2 ile uygulanır. Pratikte bu tek ayar, görsel içerik ve reklam bannerlarıyla dolu pazaryeri sayfalarında tarama yaparken trafiği %50 ile %70 arasında kesmektedir.
Yöntem 2: Tam bir tarayıcı yerine HTTP istekleri
Birçok kişi, gerekli olmadığında Selenium veya Playwright kullanıyor. Eğer sayfa, verilerin işlenmesi için JavaScript çalıştırmayı gerektirmiyorsa (bunu "Sayfa Kaynağını Görüntüle"yi açarak kolayca kontrol edebilirsiniz), HTML'yi doğrudan requests veya httpx kütüphaneleri aracılığıyla almak çok daha kârlıdır. Bu tür bir istek kilobaytlar kadar hafif olur, megabaytlar değil, çünkü tarayıcı motorunun render edilmesi, izleyiciler için ağ çağrıları ve ikincil kaynaklar ile birlikte gelmez.
import httpx
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)",
"Accept-Encoding": "gzip, br",
"Accept": "text/html,application/xhtml+xml"
}
proxies = {"http://": "http://user:pass@proxy_host:port",
"https://": "http://user:pass@proxy_host:port"}
with httpx.Client(headers=headers, proxies=proxies, http2=True) as client:
response = client.get("https://example.com/catalog/item/456")
print(len(response.content), "bayt alındı")
Tarayıcı emülasyonundan doğrudan HTTP isteklerine geçmek, site hazır HTML sunuyorsa ve istemci tarafında render gerektirmiyorsa trafiği 3-8 kat azaltır. Tek bir nokta — bu tür istekler gerçek kullanıcıdan ayırt edilmesi daha kolaydır, bu nedenle katı bot koruma sistemine sahip siteler için bu yöntemi kaliteli konut proxyleri ile birleştirmek, gerçek ev sağlayıcılarının IP'lerini sağlayarak isteklerin yasaklanma olasılığını azaltır.
Yöntem 3: Gizli JSON API üzerinden tarama
Neredeyse tüm modern pazaryerleri — Wildberries, Ozon ve Yandex.Market dahil — ürün kartlarını ve listelerini ön uç tarafından çağrılan iç JSON API'leri aracılığıyla oluşturur. Bu uç noktaları, DevTools'taki Network sekmesinden XHR/Fetch türüne göre filtreleyerek bulabilirsiniz. Genellikle, bir istek 5-30 KB boyutunda temiz verilerle JSON döner: ürün ID'si, fiyat, indirim, stok durumu, puan — tek bir byte HTML işaretlemesi veya CSS olmadan.
Tam bir HTML sayfası ile doğrudan JSON API'ye erişim arasındaki veri iletim miktarındaki fark 10-15 katı bulabilir. Ek bir avantaj — JSON, programatik olarak daha kolay işlenir: XPath seçicilerine gerek yoktur, sadece sözlük anahtarı ile gerekli alana erişmek yeterlidir. Dezavantajı — bu tür uç noktalar genellikle belirli başlıklar, oturum token'ları veya isteğin imza parametrelerini gerektirir, bunlar öncelikle ana sayfadan veya mobil uygulamadan çıkarılmalıdır.
Uygulayıcılara tavsiye
Gizli API etrafında bir tarayıcı inşa etmeden önce, proxy yakalayıcı (Charles Proxy, Fiddler) aracılığıyla sitenin mobil versiyonunu veya uygulamasını kontrol edin — mobil API'ler genellikle masaüstü versiyonuna göre daha kompakt ve kararlı JSON döner.
Yöntem 4: Gzip ve Brotli sıkıştırması
Tam HTML almak zorunda kalsanız bile, doğru sıkıştırmayı etkinleştirmek iletim boyutunu %60-80 oranında azaltabilir. Birçok kendi yazdığınız tarayıcı, Accept-Encoding: gzip, br başlığını göndermediğinden, sunucu paketlenmemiş bir yanıt döner. requests ve httpx kütüphaneleri Gzip ve Brotli'yi otomatik olarak açar — önemli olan, istek başlıklarında sıkıştırma desteğini açıkça belirtmektir.
Brotli, ortalama olarak, metin HTML'sini Gzip'ten %15-20 daha fazla sıkıştırır, ancak tüm sunucular bu algoritmayı desteklemez — her iki seçeneği de talep etmek ve sunucunun en uygun olanı seçmesine izin vermek gerekir. JSON API'ler için sıkıştırmanın etkisi daha belirgindir: tekrar eden sözlük anahtarları ("price", "name", "rating") neredeyse mükemmel bir şekilde sıkıştırılır, yanıtın ağırlığını kat kat azaltır.
Yöntem 5: Koşullu istekler ve önbellekleme
Eğer aynı ürünlerin fiyatlarını günde birkaç kez izliyorsanız, kontroller arasında çoğu kart değişmez. İlk istekte alınan ETag değeriyle birlikte If-Modified-Since ve If-None-Match başlıklarını kullanın. Eğer içerik değişmemişse, sunucu 304 Not Modified durumu döner, neredeyse yanıt gövdesi olmadan — değişmeyen sayfalarda trafik tasarrufu %95'e kadar çıkabilir.
import httpx
etag_store = {}
def fetch_with_cache(url, client):
headers = {}
if url in etag_store:
headers["If-None-Match"] = etag_store[url]
resp = client.get(url, headers=headers)
if resp.status_code == 304:
return None # veri değişmedi
etag_store[url] = resp.headers.get("ETag", "")
return resp.content
Tüm siteler ETag'i doğru bir şekilde desteklemiyor, ancak destekleyenler için bu yöntem, düzenli izleme sırasında trafiği azaltmanın en etkili yolu haline gelir — aslında yalnızca gerçek veri değişiklikleri için ödeme yaparsınız, değişmeyen içeriği yeniden yüklemek için değil.
Yöntem 6: Gerekli alanların seçici taraması
Bazen sunucudan gelen trafiği azaltmak mümkün değildir — site, isteğe bağlı olarak tam sayfayı döner. Bu durumda optimizasyon, işleme aşamasında gerçekleşir: sadece bir alanı çıkarmak için sayfayı tekrar yüklemeyin. XPath veya CSS seçicilerinizi, DOM'da bir geçişte tüm gerekli nitelikleri — fiyat, isim, parça numarası, stok durumu, puan — çıkarmak için tasarlayın; farklı görevler için aynı URL'ye farklı tarayıcılarla tekrar tekrar istek yapmaktansa.
Ayrıca, iç sayfaların tarama derinliğini sınırlamak da faydalıdır. Fiyat izlemek için kategori sayfasındaki (ürün listesi) veriler yeterliyse, her ürün kartına ayrı ayrı geçmeyin — bu, genellikle fiyat ve stok durumunu etkilemeyen açıklama ve yorumlar dışında yeni bilgi sağlamayan tekrarlayan bir trafiğe yol açar.
Yöntem 7: Tarama deseninin optimizasyonu
URL'lerin deduplikasyonu — temel ama sıkça göz ardı edilen bir yöntemdir. Pazaryeri dizinleri, aynı içeriğe sahip ancak farklı sıralama parametreleri, UTM etiketleri veya oturum ID'leri ile birçok bağlantı oluşturur. URL'leri sıraya koymadan önce normalleştirmek (izleme parametrelerini kaldırmak, sorgu parametrelerini sıralamak) büyük dizinlerde %10-30 oranında gereksiz istekleri ortadan kaldırır.
Verilerin değişim sıklığına göre tarama önceliği vermek de trafiği tasarruf eder: yüksek talep gören ve dalgalı fiyatlı ürünleri her saat kontrol etmek, nadir bulunan ürünleri ise günde bir kez kontrol etmek daha iyidir. Bu tür bir uyarlanabilir program, tüm kartları eşit bir sıklıkta taramak yerine, kritik verilerin güncelliğini koruyarak toplam istek sayısını 2-4 kat azaltır.
Bu, proxy stratejisiyle nasıl birleştiriliyor
Trafiği azaltmak, proxy türünü seçmeyi doğrudan etkiler. Eğer karmaşık bir bot koruma sistemi olmadan doğrudan HTTP istekleri ile büyük miktarda sayfa tarıyorsanız, hızlı ve ucuz veri merkezi proxyleri yeterlidir — bunlar, günde binlerce kart tararken gigabayt başına düşük maliyetle yüksek iletim hızı sağlar.
Botlara karşı sert koruma sistemine sahip siteler için, gerçek kullanıcı davranışını taklit etmek önemlidir; bu nedenle konut proxyleri kullanmak daha iyidir — gereksiz kaynakları engelleme yöntemleriyle birleştirerek, hem düşük trafik hem de sitenin isteğe olan güvenini artırırsınız. Eğer tarama, pazaryerlerinin mobil API'leri üzerinden yapılıyorsa, burada veriler daha kompakt ve bot koruma sistemi mobil IP aralıklarına odaklanıyorsa, yasaklama riskini azaltmak için mobil proxyleri değerlendirmek gerekir.
"İstek başına minimum trafik" + "görev için doğru proxy türü" kombinasyonu, altyapı maliyetlerini azaltırken veri toplama hızını artırmanıza olanak tanır; bu, güvenilirlikten ödün vermeden.
Yöntemlerin karşılaştırma tablosu
| Yöntem | Trafik Azaltma | Uygulama Zorluğu |
|---|---|---|
| Resimleri/CSS/fontları engelleme | %50-70 | Düşük |
| Tarayıcı yerine HTTP istekleri | 3-8 kat | Orta |
| Gizli JSON API | 10-15 kat | Yüksek |
| Gzip/Brotli sıkıştırması | %60-80 | Düşük |
| Koşullu istekler (ETag) | değişmeyen sayfalarda %95'e kadar | Orta |
| URL deduplikasyonu ve önceliklendirme | 2-4 kat | Orta |
Uygulama kontrol listesi
- Hedef sayfanın JavaScript render'ı gerektirip gerektirmediğini kontrol edin, yoksa HTML'yi doğrudan
httpx/requestsile alabilirsiniz - Eğer tarayıcı gerekiyorsa, headless tarayıcıda image/media/font/stylesheet engellemesini ayarlayın
- DevTools → Network → XHR/Fetch üzerinden iç JSON API'leri bulun
- Tüm isteklere
Accept-Encoding: gzip, brbaşlıklarını ekleyin - Tekrarlayan URL'lerde koşullu istekler için ETag/Last-Modified saklamasını gerçekleştirin
- Tarama öncesinde URL kuyruğunu normalleştirip deduplikasyon yapın
- Verilerin önemine ve dalgalanmasına göre uyarlanabilir tarama sıklığını ayarlayın
- Trafik profilinize uygun proxy türünü seçin — veri merkezi, konut veya mobil
Sonuç
Tarayıcı trafiğini 5 kat azaltmak, yöntemleri ardışık olarak uygularsanız gerçekçi bir hedeftir: gereksiz kaynakları kaldırmak, mümkün olduğunda doğrudan HTTP isteklerine veya JSON API'ye geçmek, sıkıştırmayı etkinleştirmek, değişmeyen veriler için koşullu istekler kullanmak ve tarama desenini optimize etmek. Bu adımların her biri ölçülebilir bir etki sağlar ve bir araya geldiklerinde pazaryerlerinden ve diğer sitelerden veri toplama projesinin ekonomisini köklü bir şekilde değiştirir.
Trafik optimizasyonundan sonra, yeni yük profiline uygun proxy altyapısını doğru bir şekilde seçmek önemlidir. Büyük veri hacimlerini hızlı ve ucuz bir şekilde toplamak için veri merkezi proxyleri uygundur, ancak katı bot koruma sistemine sahip sitelerle çalışmak için gerçek ev sağlayıcılarının IP adresleriyle konut proxyleri kullanmak, yoğun tarama sırasında yasaklama riskini azaltır.