İçeriğe geç
Guides 5 dk okuma 1288 görüntülenme

JavaScript Sayfa Render'ı için Scrapy-Splash'te Proxy

GProxy'yi Scrapy-Splash projelerinizde nasıl yapılandırıp kullanacağınızı öğrenin; JavaScript ağırlıklı sayfaları render edip dinamik içeriği güvenilir şekilde kazıyın.

Python Parsing
JavaScript Sayfa Render'ı için Scrapy-Splash'te Proxy

Scrapy-Splash'e proxy entegre etmek, Splash render servisinden çıkan isteklerin bir ara sunucu üzerinden yönlendirilmesini sağlar; böylece JavaScript ile render edilen web sayfaları için IP rotasyonu, coğrafi engel aşımı ve anonimlik mümkün olur.

Scrapy-Splash ile Proxy Entegrasyonunu Anlamak

Scrapy-Splash, Scrapy'nin scraping çatısını Splash'in headless tarayıcı render yetenekleriyle birleştirir. Bu kurulumda bir proxy yapılandırıldığında, Splash içindeki tarayıcı örneğinin yaptığı web istekleri belirtilen proxy sunucusuna yönlendirilir. Bu; ilk sayfa yüklemesi, sonraki AJAX istekleri ve sayfadaki JavaScript'in başlattığı diğer tüm ağ etkinlikleri için geçerlidir.

Scrapy-Splash ile Neden Proxy Kullanılır?

Dinamik içerik kazırken proxy'ler birkaç kritik işlev görür:
* IP tabanlı hız sınırlarını ve engelleri aşma: siteler erişimi çoğu zaman kaynak IP adresine göre kısıtlar. Proxy'ler istekleri birden çok IP'ye dağıtarak bu kısıtları hafifletir.
* Coğrafi kısıtlı içeriğe erişme: belirli coğrafi bölgelerdeki proxy'ler, scraper'ın fiziksel konumunda erişilemeyen içeriğe ulaşabilir.
* Anonimliği koruma: proxy'ler scraper'ın gerçek IP adresini gizleyerek operasyonel güvenliği artırır.
* Yükü dağıtma: büyük ölçekli işlerde proxy'ler ağ yükünü dağıtmaya ve tek bir IP'nin aşırı yüklenme ya da işaretlenme olasılığını azaltmaya yardımcı olur.

Scrapy-Splash Proxy İsteklerini Nasıl İşler

  1. Scrapy, Splash daemon'una bir SplashRequest gönderir.
  2. Splash isteği alır ve proxy argümanı varsa, dahili tarayıcı örneğini (örneğin Chromium) tüm ağ trafiğini o proxy üzerinden geçirecek şekilde yapılandırır.
  3. Tarayıcı örneği hedef URL'ye gider, JavaScript'i render eder ve gerekli ağ çağrılarını (örneğin XHR'ler, varlıkların indirilmesi) yapılandırılan proxy üzerinden yapar.
  4. Splash, tam olarak render edilmiş HTML'i, ekran görüntüsünü veya istenen diğer verileri Scrapy'ye geri döndürür.

Scrapy-Splash'te Proxy Yapılandırma

Proxy entegrasyonunun temel yöntemi SplashRequest içindeki proxy argümanıdır.

Temel Proxy Yapılandırması

Belirli bir istek için proxy kullanmak üzere proxy argümanını SplashRequest'in args sözlüğü içinde geçirin. Proxy URL biçimi [protocol://][user:password@]host:port şeklindedir.

import scrapy
from scrapy_splash import SplashRequest

class BasicProxySpider(scrapy.Spider):
    name = 'basic_proxy_spider'
    start_urls = ['http://quotes.toscrape.com/js/']

    def start_requests(self):
        # Temel bir HTTP proxy kullanım örneği
        # Gerçek proxy IP'niz ve portunuzla değiştirin
        yield SplashRequest(
            url=self.start_urls[0],
            callback=self.parse,
            args={
                'wait': 0.5,
                'proxy': 'http://your_proxy_ip:port'
            }
        )

    def parse(self, response):
        title = response.css('title::text').get()
        yield {
            'title': title,
            'url': response.url,
            'proxy_used': response.request.meta.get('splash', {}).get('args', {}).get('proxy')
        }

Kimlik Doğrulamalı Proxy'ler

Kimlik doğrulaması gerektiren proxy'lerde kullanıcı adı ve parolayı doğrudan proxy URL dizesine gömün.

import scrapy
from scrapy_splash import SplashRequest

class AuthenticatedProxySpider(scrapy.Spider):
    name = 'auth_proxy_spider'
    start_urls = ['http://quotes.toscrape.com/js/']

    def start_requests(self):
        # Gerçek proxy bilgilerinizle değiştirin
        proxy_user = 'your_username'
        proxy_pass = 'your_password'
        proxy_host = 'your_proxy_ip'
        proxy_port = 'port'

        authenticated_proxy_url = f'http://{proxy_user}:{proxy_pass}@{proxy_host}:{proxy_port}'

        yield SplashRequest(
            url=self.start_urls[0],
            callback=self.parse,
            args={
                'wait': 0.5,
                'proxy': authenticated_proxy_url
            }
        )

    def parse(self, response):
        title = response.css('title::text').get()
        yield {
            'title': title,
            'url': response.url,
            'proxy_used': response.request.meta.get('splash', {}).get('args', {}).get('proxy')
        }

Dinamik Proxy Seçimi ve Rotasyon

Her istekte farklı proxy ya da bir rotasyon şeması gereken durumlarda, spider içinde bir proxy listesi tutun ve dinamik olarak birini seçin.

import scrapy
from scrapy_splash import SplashRequest
import random

class RotatingProxySpider(scrapy.Spider):
    name = 'rotating_proxy_spider'
    start_urls = ['http://quotes.toscrape.com/js/', 'http://toscrape.com/']

    # Bir proxy listesi tanımlayın (gerçek proxy'lerinizle değiştirin)
    # Kimlik doğrulamalı proxy'leri 'http://user:pass@host:port' olarak ekleyin
    proxy_list = [
        'http://proxy1_ip:port1',
        'http://user:pass@proxy2_ip:port2',
        'http://proxy3_ip:port3',
    ]

    def start_requests(self):
        for url in self.start_urls:
            selected_proxy = random.choice(self.proxy_list)
            yield SplashRequest(
                url=url,
                callback=self.parse,
                args={
                    'wait': 0.5,
                    'proxy': selected_proxy
                },
                # Hangi proxy'nin kullanıldığını izlemek için özel meta da geçebilirsiniz
                meta={'proxy_selected': selected_proxy}
            )

    def parse(self, response):
        title = response.css('title::text').get()
        yield {
            'title': title,
            'url': response.url,
            'proxy_used': response.request.meta.get('proxy_selected') # Özel meta'ya erişim
        }

Genel Proxy Yapılandırması (Splash Daemon)

Splash, tüm giden istekleri için varsayılan bir proxy kullanacak şekilde yapılandırılabilir. Bu genellikle Splash daemon'unu başlatmadan önce HTTP_PROXY ve HTTPS_PROXY ortam değişkenlerini ayarlayarak yapılır. Genel bir varsayılan sağlasa da, dinamik scraping görevlerinde istek başına proxy belirtmeye kıyasla daha az kontrol sunar.

Proxy Türleri ve Etkileri

Proxy türü seçimi anonimliği, performansı ve tespit edilme riskini etkiler.

Özellik Veri merkezi proxy'leri Residential proxy'ler
IP kaynağı Ticari veri merkezleri Gerçek residential ISP'ler
Anonimlik Orta (IP'ler genellikle bilinen alt ağlara aittir) Yüksek (IP'ler sıradan tüketici kullanıcı gibi görünür)
Hız Adanmış altyapı sayesinde genellikle daha hızlı Residential ağlar üzerinden geçtiği için daha yavaş olabilir
Maliyet IP başına daha düşük IP veya bant genişliği başına daha yüksek
Tespit Gelişmiş antibot sistemlerince tespit ve engellenmeye daha açık Tespit edilmesi daha zor; engellenmesi daha güç
Kullanım alanları Genel scraping, daha az korunan sitelerde yüksek hacimli işler Çok hassas scraping, gelişmiş antibot sistemlerini aşma

Proxy Protokolleri

  • HTTP/HTTPS proxy'ler: standart web trafiğini taşır. Splash her iki protokolü de tam olarak destekler.
  • SOCKS proxy'ler: SOCKS (SOCKS4, SOCKS5) proxy'ler daha alt seviyede çalışır ve yalnızca HTTP/HTTPS değil, çeşitli ağ protokollerini taşıyabilir. Splash ile SOCKS proxy kullanmak için protokolü proxy URL'sinde belirtin (örneğin socks5://user:pass@host:port).

Sticky ve Rotasyonlu Proxy'ler

  • Sticky proxy'ler: aynı IP adresini belirli bir süre (örneğin birkaç dakikadan saatlere kadar) veya oturum boyunca korur. Tutarlı IP adresi isteyen hedef sitelerde oturum durumunu sürdürmek için kullanışlıdır.
  • Rotasyonlu proxy'ler: her istekte ya da düzenli kısa aralıklarla yeni bir IP adresi atar. Kaynak IP'yi sık değiştirerek IP yasaklarından kaçınmanın kritik olduğu yüksek hacimli scraping için idealdir.

Sorun Giderme ve İyi Uygulamalar

Proxy Bağlantısını Doğrulayın

Büyük ölçekli devreye almadan önce proxy'nizi bağımsız olarak test edin. Basit bir curl komutu ya da Python requests betiği proxy'nin çalıştığını ve erişilebilirliğini doğrular.

curl --proxy http://your_proxy_ip:port http://httpbin.org/ip

Splash Loglarını Kontrol Edin

Splash içindeki proxy bağlantısı veya kimlik doğrulamasıyla ilgili sorunlar genellikle Splash daemon'u tarafından loglanır. Hata ayıklarken Splash'in konsol çıktısını veya log dosyalarını inceleyin.

Proxy Hatalarını Düzgün Yönetin

Başarısız istekleri karşılamak için yeniden deneme mekanizmaları veya proxy rotasyon mantığı uygulayın. Bir proxy sürekli başarısız oluyorsa onu aktif havuzdan çıkarın ya da bir süreliğine sağlıksız olarak işaretleyin. Scrapy'nin retry middleware'i uyarlanabilir, ancak proxy'ye özgü hata yönetimi çoğu zaman spider içinde özel mantık gerektirir.

Performans Değerlendirmeleri

Proxy'ler ek bir ağ atlaması getirir ve gecikmeyi artırır.
* Proxy havuzu yönetimi: proxy sağlığını, yanıt sürelerini ve kullanımı izleyen bir sistem kurun. Daha hızlı ve güvenilir proxy'lere öncelik verin.
* Kaynak kullanımı: Splash'in kendisi kaynak yoğundur. Proxy kullanımı ek yük getirir. Splash daemon'unun bu birleşik yükü kaldıracak yeterli CPU ve RAM'e sahip olduğundan emin olun.

Siteye Özgü Antibot Önlemleri

Gelişmiş antibot sistemleri, basit IP adreslerinin ötesindeki kalıpları tespit eder. Residential proxy kullansanız bile siteler otomatik gezinmeyi fark edebilir. Bu önlemlere karşı user-agent, viewport, browser_params gibi Splash argümanlarını ince ayarlayın ve daha insana benzer etkileşimler için özel Lua betikleri kullanın.

IP Sızıntısı

Proxy'nin scraper'ın gerçek IP'sini gerçekten gizlediğini doğrulayın. Görünen IP adresini kontrol etmek için Splash içinde http://httpbin.org/ip veya https://ipleak.net/ gibi servisleri kullanın.

# Splash içinde görünen IP'yi kontrol eden Lua betiği
lua_script = """
function main(splash)
    splash:set_proxy_auto() -- 'proxy' argümanı ayarlandıysa proxy'nin kullanılmasını sağlar
    splash:go("http://httpbin.org/ip")
    splash:wait(0.5)
    return splash:html()
end
"""

# Lua betiğini kullanan örnek SplashRequest
yield SplashRequest(
    url="about:blank", # Gezinmeyi Lua yönettiği için buradaki URL önemli değil
    callback=self.parse_ip_check,
    endpoint='execute',
    args={
        'lua_source': lua_script,
        'proxy': 'http://your_proxy_ip:port',
        'timeout': 90 # Lua betikleri için timeout değerini artırın
    }
)

def parse_ip_check(self, response):
    # IP'yi çıkarmak için httpbin.org/ip HTML yanıtını ayrıştır
    ip_address = response.css('pre::text').get() # httpbin değişirse seçiciyi güncelleyin
    self.logger.info(f"Visible IP from Splash via proxy: {ip_address}")
    # Sonraki işlemler...
Güncellendi: 04.03.2026
Kategoriye dön

Bunları da okuyun

Guides 2 dk

Nike SNKRS için Proxy: Sınırlı Sürümler ve Çoklu Katılım

Nike SNKRS'ta birden fazla hesapla çekilişlere katılmak, IP limitlerini aşmak ve ban yemeden sınırlı sürümleri kapmak için residential veya mobil proxy kullanın. Hangi türü seçmeli ve nasıl kurmalı.

Guides 2 dk

iPhone'da Proxy Nasıl Kurulur (Wi-Fi ve SOCKS5)

iPhone'da proxy'yi yerleşik Wi-Fi ayarlarından (HTTP/HTTPS) veya SOCKS5 ile hücresel kapsama için Shadowrocket gibi bir uygulamayla kurun. Adım adım iOS kurulumu ve bilinmesi gereken kısıtlar.

Guides 3 dk

Tinder için proxy: çoklu hesap ve ban'lerden kaçınma

Birden fazla profil işletmek ve IP shadowban'lerinden kaçınmak için Tinder'da mobil veya residential proxy kullanın. Mobilin neden kazandığı, kurulumu ve proxy'nin şehri neden değiştirmediği.

Guides 2 dk

StockX için proxy: fiyat takibi ve hesap yönetimi

StockX'te fiyatları izlemek, birden fazla hesap çalıştırmak ve drop'ları yasaklanmadan kapmak için residential, ISP veya mobil proxy kullanın. Hangi türü seçeceğinizi ve nasıl kuracağınızı anlatıyoruz.

Guides 3 dk

OpenAI API için Proxy: Erişim, Hız Limitleri ve Kurulum

OpenAI API'yi residential veya ISP proxy üzerinden yönlendirerek desteklenen bölgelere erişin, 429 hız limitlerinden kaçının ve hesapları izole edin. Hangi proxy'yi seçmeli ve Python kurulum örnekleri.

Guides 1 dk

E2E testleri için Cypress'te proxy kurulumu

Cypress'te proxy kurulumu: HTTP_PROXY değişkenleri, cy-proxy-middleware ve coğrafi konuma bağlı içeriğin test edilmesi.

Proxy'lerimizi deneyin

100+ ülkede 20,000+ proxy

support_agent
GProxy Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.