İçeriğe geç
ipv4proxy.tr

Çözüm

Büyük Ölçekli Veri Toplama İçin Proxy: Kuyruk, Hız ve Kapasite

Büyük ölçekli veri akışında asıl iş, istekleri kuyruğa alıp hedef başına hızı sınırlayan, hataları ayıklayan ve kapasiteyi önceden hesaplayan bir düzen kurmaktır. Proxy bu düzenin çıkış katmanıdır; IP sayısı ve trafik modeli yanlış seçilirse en iyi kuyruk bile verimsiz çalışır.

On sayfayı çeken bir betik yüz bin sayfaya ölçeklendiğinde sorunları da ölçekler: yarım kalan işler, tekrar tekrar indirilen aynı sayfalar, hedefte hız sınırına takılan işçiler ve hangi isteğin hangi IP'den çıktığını göstermeyen kayıtlar. Veri toplamanın asıl zorluğu çekmek değil, düzenli, tekrarlanabilir ve izlenebilir biçimde çekmektir.

İkinci zorluk kapasitedir. Çok sayıda IP almak her zaman daha fazla veri anlamına gelmez; darboğaz çoğu zaman hedef başına uygun gördüğünüz hız, ağ bant genişliği ya da trafik kotanızdır. Doğru soru “kaç IP?” değil, “hangi hızla, hangi hedefe, ne kadar veriyle?” sorusudur.

Kuyruk, eşzamanlılık ve hedef başına hız

İstekleri bir döngüde art arda göndermek yerine URL'leri kuyruğa koyun ve işçilerin (worker) kuyruktan almasını sağlayın. Eşzamanlılığı iki düzeyde sınırlayın: toplam işçi sayısı ve alan adı başına aynı anda açık istek sayısı. İkinci sınır hedef sitenin kaldırabileceği yükten türetilmelidir; IP eklemek bu yükü değiştirmez.

  1. 01Kuyruğa alınHer URL'ye bir kimlik, öncelik ve deneme sayacı verin. Aynı URL'nin kuyruğa iki kez girmesini kimlik üzerinden engelleyin.
  2. 02Alan adı başına sınırlayınHer alan adı için eşzamanlı istek üst sınırı ve istekler arası en kısa bekleme belirleyin. Düşük bir değerle başlayın, hata oranına bakarak artırın.
  3. 03Proxy üzerinden gönderinBağlanma ve okuma zaman aşımlarını ayrı ayrı tanımlayın. Hangi IP'nin hangi isteği taşıdığını kaydedin.
  4. 04Sonucu sınıflandırınSonucu başarı, geçici hata (yeniden denenir) ve kalıcı hata (denenmez) olarak ayırın: 404 ve 410 kalıcıdır, zaman aşımı ve 5xx geçicidir.
  5. 05Yazın ve onaylayınYanıtı saklayın, sonra kuyruktan silin. İşi yeniden çalıştırdığınızda çift kayıt oluşmaması için yazma adımı aynı girdiyle tekrarlanabilir (idempotent) olmalıdır.

Bir proxy üzerinden ilk isteği kurmak için Python ile proxy kullanımı yazısı yeterlidir; ölçekte asıl farkı kuyruk, sınır ve kayıt katmanları yaratır. Sayfa ayrıştırma ve otomasyon tarafı için web scraping çözüm sayfasına bakın.

Hata yönetimi: 429, 403, 407 ve zaman aşımları

Her hata aynı yanıtı hak etmez. Hatayı doğru sınıflandırmak yeniden deneme bütçenizi doğru yere harcamanızı sağlar; yanlış sınıflandırma ise kuyruğu gereksiz tekrarlarla doldurur. Durum kodlarının tanımı için RFC 9110 ve 429 için RFC 6585 başvurulabilir.

Durum koduna göre temel karar tablosu
DurumGenellikle anlamıİş akışındaki karşılığı
407Proxy kimlik doğrulaması eksik ya da hatalı (Proxy Authentication Required)Yeniden denemeyin; kullanıcı adı ve parolayı düzeltin, işi duraklatın
403Sunucu isteği anladı ama yetki vermedi; hedeften de proxy'den de gelebilirHemen tekrarlamayın; URL, başlıklar ve erişim kuralları gözden geçirilir, hız düşürülür
429Çok fazla istek gönderildi; yanıtta Retry-After başlığı bulunabilirBaşlıktaki süre kadar bekleyin, alan adı hızını düşürün, üstel bekleme uygulayın
5xx, zaman aşımı, bağlantı sıfırlanmasıGeçici sunucu ya da ağ sorunuSınırlı sayıda yeniden deneyin; hata oranı yükselirse alan adını kısa süre durdurun
404, 410Kaynak bulunamıyor ya da kaldırılmışYeniden denemeyin; kalıcı hata olarak işaretleyin
Yalnızca geçici hataları yeniden deneyen, üstel bekleme kullanan örnek
import random
import time

import requests

PROXY = "http://KULLANICI:[email protected]:PORT"
PROXIES = {"http": PROXY, "https": PROXY}
TRANSIENT = {429, 500, 502, 503, 504}


def fetch(url, max_attempts=4):
    for attempt in range(1, max_attempts + 1):
        try:
            resp = requests.get(url, proxies=PROXIES, timeout=(5, 20))
        except requests.exceptions.ProxyError:
            raise  # HTTPS'te 407 burada görünür: yeniden denemeyin, kimlik bilgisini düzeltin
        except (requests.ConnectionError, requests.Timeout):
            resp = None  # ağ hatası geçici sayılır

        if resp is not None and resp.status_code not in TRANSIENT:
            return resp  # 200, 404, 403 gibi kesin yanıtlar yeniden denenmez
        if attempt == max_attempts:
            return resp  # hak bitti; None dönerse çağıran bunu hata olarak işlemeli

        wait = 2 ** attempt + random.uniform(0, 1)  # üstel bekleme + rastgele sapma
        retry_after = resp.headers.get("Retry-After", "") if resp is not None else ""
        if retry_after.isdigit():
            wait = max(wait, int(retry_after))
        time.sleep(wait)

HTTPS hedeflerde proxy'nin 407 yanıtı tünel kurulurken döner; Python requests bunu yanıt olarak değil ProxyError olarak yükselttiği için örnekte ayrıca yakalanır. SOCKS5'te kimlik reddi, el sıkışma sırasında bağlantı hatası olarak görünür. Hata oranını IP ve alan adı bazında ölçün: tek IP'de yoğunlaşan hata o çıkışa özgü bir sorunu, tüm IP'lerde birlikte artan hata hedefin davranışını gösterir. Ayrıntı için 407, 403 ve 429 rehberine bakın; proxy'nin çalışıp çalışmadığını Proxy Kontrol ile ayırt edebilirsiniz.

Kapasite planlama: kaç IP, hangi trafik modeli?

Kapasiteyi iki eksende hesaplayın: istek hızı (kaç IP gerekir) ve veri hacmi (GB mı, limitsiz mi). İkisini de varsayımla değil, küçük bir denemenin ölçümleriyle besleyin.

  1. Günlük istek = URL sayısı × günlük okuma sayısı.
  2. Saniyedeki istek = günlük istek ÷ 86.400 (işi gün boyu yayıyorsanız).
  3. Gereken IP sayısı = saniyedeki istek ÷ bir IP'den göndermeyi uygun gördüğünüz saniyedeki istek. Alan adı başına eşzamanlılık sınırını ayrıca uygulayın.
  4. Aylık veri = günlük istek × ortalama yanıt boyutu × 30; hesabın üzerine pay bırakın.
Hangi üründe hangi trafik modeli?
ÜrünTrafik ve süre modeliIP modeliVeri akışında anlamı
IPv4 Datacenter30 günlük paket; trafik sağlayıcı beyanına göre sınırsızStatik IPv4: 30, 100, 250 ve 1.000 IPÇok sayıda hafif ve düzenli istek; kapasiteyi IP sayısı ve istek hızı belirler
ResidentialGB bazlı, 30 günlük paketler (1 ile 500 GB)Dönen havuzHacmi önceden kestirebildiğiniz işler; tüketim GB ile ölçülür
Limitsiz ResidentialGB sınırı yok; günlük, haftalık ve 30 günlük paketler; 20 ile 1.000 Mbps kademeleriDönen havuzHacmi öngörülemeyen akışlar; kademe plan adının parçasıdır, kullanım koşulları sözleşmededir
Rotating MobilTürkiye'de tek seferlik GB paketleri; ayrıca limitsiz günlük, haftalık ve aylık paketlerDönen mobil IPMobil çıkış gereken işler; GB paketinde tüketim sayılır, limitsiz pakette süre belirler
ISPIP adedi ve süreyle paketlenir (Türkiye'de 1, 3, 6 ve 12 ay)Statik IPv4Uzun süreli ve tutarlı çıkış gereken akışlar; trafik koşulunu sipariş sayfasından doğrulayın
IPv6Aylık paket/64 alt ağlardan 100, 500, 2.500 ve 15.000 adresYalnızca IPv6 destekleyen hedeflerde ve yalnızca HTTP(S) ile işe yarar

Kontrol listesi

  • URL'leri kuyruğa alın; her kayda kimlik, öncelik ve deneme sayacı verin.
  • Eşzamanlılığı hem toplamda hem alan adı başına sınırlayın; alan adı sınırını IP sayınızdan değil, hedefin kaldırabileceği yükten türetin.
  • Bağlanma ve okuma zaman aşımlarını ayrı ayrı belirleyin; yeniden denemede üstel bekleme ve rastgele sapma kullanın.
  • 407'yi kimlik hatası, 403'ü erişim sorunu, 429'u hız sınırı olarak ayrı kollarda işleyin ve hiçbirini sınırsız yeniden denemeyin.
  • Yazma adımını tekrarlanabilir tasarlayın; iş yeniden çalıştığında çift kayıt oluşmasın.
  • Her istek için çıkış IP'sini, alan adını, durum kodunu, süreyi ve bayt miktarını kaydedin; hata ve trafik tüketimini bu kayıttan izleyin.
  • Paketi seçmeden önce birkaç yüz URL'lik bir deneme çalıştırıp gerçek yanıt boyutunu ve hata oranını ölçün.

Sık sorulan sorular

ipv4proxy.tr

Doğru adresi bulun.

Sekiz ürün, doğrulanmış fiyatlar, gerçek araçlar. Sipariş saglamproxy.com üzerinde tamamlanır.