Scrapy Framework’ünde Proxy Kullanımı

2 views

Scrapy ile Proxy Kullanımı

Scrapy, Python tabanlı güçlü bir web scraping framework’üdür. Büyük ölçekli scraping projelerinde proxy kullanımı neredeyse zorunludur. Scrapy’de proxy’yi en doğru ve esnek şekilde kullanmak için middleware yazmak veya mevcut middleware’leri yapılandırmak gerekir.

Bu makalede Scrapy’de proxy kullanımını detaylı olarak anlatacağız.

1. Temel Proxy Kullanımı (HttpProxyMiddleware)

Scrapy varsayılan olarak HttpProxyMiddleware middleware’ini sunar. En basit kullanım şu şekildedir:

settings.py dosyasına ekleyin:

Python

 

DOWNLOADER_MIDDLEWARES = {    'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 110, } # Proxy listesi PROXY_LIST = [    'http://proxy_ip1:proxy_port',    'http://proxy_ip2:proxy_port',    'http://kullanici:sifre@proxy_ip3:proxy_port', ]

2. Özel Proxy Middleware Yazma (Önerilen Yöntem)

Daha esnek ve profesyonel bir çözüm için kendi middleware’inizi yazmanızı öneririz.

middlewares.py dosyası oluşturun:

Python

 

import random from scrapy import signals class ProxyMiddleware:    def __init__(self, proxy_list):        self.proxy_list = proxy_list    @classmethod    def from_crawler(cls, crawler):        return cls(            proxy_list=crawler.settings.get('PROXY_LIST')        )    def process_request(self, request, spider):        proxy = random.choice(self.proxy_list)        request.meta['proxy'] = proxy        spider.logger.info(f"Using proxy: {proxy}")

settings.py dosyasına ekleyin:

Python

 

DOWNLOADER_MIDDLEWARES = {    'myproject.middlewares.ProxyMiddleware': 350,    'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 400, } PROXY_LIST = [    'http://185.XX.XX.XX:8080',    'http://kullanici:[email protected]:3128',    'socks5://proxy_ip:1080', ]

3. Proxy Rotasyonu ile Kullanım

Yukarıdaki middleware zaten rastgele proxy seçimi yapmaktadır. Daha gelişmiş rotasyon için şu yöntemleri kullanabilirsiniz:

  • Her istekte farklı proxy
  • Domain bazlı proxy atama
  • Hata durumunda proxy değiştirme

4. Hata Durumunda Proxy Değiştirme

Middleware’e hata yönetimi ekleyebilirsiniz:

Python

 

def process_exception(self, request, exception, spider):    proxy = request.meta.get('proxy')    spider.logger.warning(f"Proxy {proxy} failed. Changing proxy...")    # Yeni proxy ata    request.meta['proxy'] = random.choice(self.proxy_list)    return request

5. Tam Örnek settings.py Yapılandırması

Python

 

BOT_NAME = 'myproject' SPIDER_MODULES = ['myproject.spiders'] NEWSPIDER_MODULE = 'myproject.spiders' # Proxy Middleware DOWNLOADER_MIDDLEWARES = {    'myproject.middlewares.ProxyMiddleware': 350, } PROXY_LIST = [    'http://proxy1:8080',    'http://kullanici:sifre@proxy2:3128',    'socks5://proxy3:1080', ] # User-Agent Rotasyonu (önerilir) USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36' # Otomatik throttle AUTOTHROTTLE_ENABLED = True AUTOTHROTTLE_START_DELAY = 1 AUTOTHROTTLE_MAX_DELAY = 10

6. En İyi Uygulamalar

Uygulama Açıklama
Proxy rotasyonu Her istekte farklı proxy kullanın
User-Agent rotasyonu Bot tespitini azaltır
Hata yönetimi Proxy hatasında otomatik değiştirme
Rate limiting AUTOTHROTTLE veya DOWNLOAD_DELAY kullanın
Logging Hangi proxy’nin kullanıldığını loglayın
Residential / Mobile Proxy Yüksek güvenlikli siteler için tercih edin

 

7. Sık Karşılaşılan Sorunlar

Sorun Çözüm
Tüm istekler aynı proxy’den gidiyor Middleware’in aktif olduğundan emin olun
Proxy hatası alınıyor Hata yönetimini middleware’e ekleyin
SOCKS5 proxy çalışmıyor PySocks kütüphanesini yükleyin
Çok fazla ban yiyorsunuz Residential/Mobile proxy + User-Agent rotasyonu kullanın

 

Sonuç

Scrapy’de proxy kullanımı en sağlıklı şekilde özel middleware yazarak yapılır. Bu yöntem hem esnektir hem de proxy rotasyonu, hata yönetimi gibi ileri düzey özellikleri kolayca eklemenizi sağlar.

Profesyonel scraping projelerinde proxy + User-Agent + Rate Limiting kombinasyonu neredeyse zorunludur.

Bir sonraki makalemizde Web Scraping İçin Proxy ve User-Agent Yönetimi konusunu detaylı olarak inceleyeceğiz.

Top