Scarnox · Blog

Scraping için rotating proxy: kurulum ve tuzaklar

Rotating proxy, trafiğinizin çıktığı IP adresini her istekte ya da belirli bir aralıktan sonra değiştirir. Web scraping'in en yaygın araçlarından biridir ve en çok yanlış kullanılanlardan biridir. Çok az döndürürseniz tek bir adres hız sınırına takılır. Çok fazla döndürürseniz trafiğiniz hiçbir ziyaretçiye benzemez. Bu rehber iki döndürme modelini açıklar, ölü proxy'ler için yeniden denemeli çalışan bir Python kurulumu gösterir ve bir proxy alanının captcha çözmeye nasıl uyduğunu anlatır.

Döndürme ve sabit oturumlar

Bir rotating proxy servisi adresleri iki şekilde verir:

Gerçek bir ziyaretçi bir ziyaret boyunca tek bir adres kullanır. Sabit oturumlar bu davranışı taklit eder, bu yüzden bir site çerez ya da oturum kullanıyorsa genellikle daha iyi varsayılandırlar. Durumsuz tarama için istek başına döndürmeyi kullanın.

Python'da temel bir rotating havuz

Aşağıdaki örnek bir proxy URL havuzu tutar, bunların arasında döner ve bir tanesi başarısız olduğunda sonrakine geçer. Kimlik bilgilerini kaynak kodda değil, ortam değişkenlerinde tutun:

import itertools
import os
import requests

# Proxy URL'leri ortam değişkeninden gelir, örneğin:
# PROXY_POOL="http://user:pass@203.0.113.10:8080,http://user:pass@203.0.113.11:8080"
PROXIES = [p.strip() for p in os.environ.get("PROXY_POOL", "").split(",") if p.strip()]
rotation = itertools.cycle(PROXIES)

def fetch(url: str, max_tries: int = 3) -> requests.Response:
    last_error = None
    for _ in range(max_tries):
        proxy = next(rotation)
        try:
            r = requests.get(
                url,
                proxies={"http": proxy, "https": proxy},
                timeout=30,
            )
            if r.status_code == 407:  # proxy kimlik doğrulaması başarısız
                raise requests.RequestException("proxy auth rejected")
            return r
        except requests.RequestException as exc:
            last_error = exc  # ölü ya da yavaş proxy: sıradakini dene
    raise RuntimeError(f"{url} için tüm denemeler başarısız: {last_error}")

Burada iki ayrıntı önemlidir. Birincisi, ölü bir proxy aynı adreste değil, farklı bir adreste yeniden denenmelidir. İkincisi, kimlik doğrulama hatasıyla başarısız olan bir istek durdurulmalı ve raporlanmalıdır; tüm havuzu tüketmemelidir.

Proxy sağlığını takip edin

Basit bir round robin, başarısızlık vermeye başlamış bir proxy'ye trafik göndermeye devam eder. Her adres için basit bir puan tutun: yakın zamandaki başarısızlıkları sayın ve bir eşiği aştığında adresi bir bekleme süresi için havuzdan çıkarın. Sonra geri getirin ve yeniden izleyin. Scraper'ınız isteklerini havuzun sağlıklı kısmına harcar.

Her sonuçla birlikte kullanılan proxy'yi loglayın. Bir site engellemeye başladığında, sorumlunun tek bir adres, tek bir bölge mi yoksa tüm havuz mu olduğunu bilmek isteyeceksiniz.

Havuzu hızlandırın

Döndürme yükü adreslere yayar, ama her adresin yine bir hızı vardır. Adres başına bir gecikme ve tüm havuz genelinde saniye başına bir üst sınır belirleyin. Döndürme, daha fazla trafik göndermek için bir izin değildir. Bir adresten gelen trafiği makul sınırlar içinde tutmanın bir yoludur.

Yaygın hatalar

Döndürme sorunlarının çoğu birkaç alışkanlıktan gelir. Bir giriş ya da ödeme akışının ortasında adresi döndürmek oturumu bozar ve siteyi şüpheli hale getirir. 429 yanıtı, sitenin bir hız sınırıdır, bozuk bir proxy değildir; bu yüzden hemen yeni bir adrese geçip yeniden denemek sorunu yalnızca yayar. Aynı çerezleri tutarken her istekte adresi değiştirmek de tutarsızdır, çünkü çerezler farklı bir ziyaretçiye verilmiştir. Son olarak, hiç kontrol edilmeyen bir havuz sessizce ölü adreslerle dolar ve hata oranınız belirgin bir neden olmadan yükselir. Havuzu bir zamanlamayla kontrol edin ve başarısız olanları çıkarın.

Proxy'ler ve captcha çözme

Bazı captcha görevleri, scraper'ınızın kullandığı proxy'yi kullanabilir. Bunu isteğe bağlı proxy alanında, http://user:pass@host:port biçiminde geçersiniz; çözüm sayfa isteğinizle aynı ağ yolundan yapılır. Proxysiz görevler bu alanı tamamen atlar. Hangisini seçeceğiniz, sitenin captcha'yı ağ adresine bağlayıp bağlamadığına bağlıdır; bu seçim proxy ile proxysiz captcha sayfasında açıklanır.

İki pratik nokta:

Bugün Scarnox'taki canlı captcha tipi PopularCaptcha'dır. PopularCaptcha Python rehberi isteği ve döndürülen token'ın nasıl gönderileceğini gösterir.

Proxy'lerinizi seçmek

Döndürdüğünüz adresin tipi, döndürmenin kendisi kadar önemlidir. Datacenter adresleri hızlı ve istek başına ucuzdur, ama genellikle düşük puan alır. Residential adresler daha iyi puan alır ve daha yavaştır. Residential ve datacenter proxy karşılaştırması bunları derinlemesine karşılaştırır ve oradaki tavsiye, burada kurduğunuz havuz için de geçerlidir.

Sorumlu scraping

Sonraki adımlar

Ücretsiz deneme kredisiyle başlayın, kart gerekmez: hesap oluşturun ve PopularCaptcha akışını kendi proxy'nizle test edin. Güncel fiyatlar için fiyatlandırma sayfasına bakın.