Geonode logo
Carl Gamutan

Carl Gamutan

Güncellenme: 7 Ekim 2026

Yayınlanma: 2 Ekim 2026

Scrapy ile Proxy'leri Nasıl Kullanılır?

Scrapy, büyük ölçekte veri taraması ve veri çıkarma işlemleri için kullanılan bir Python çerçevesidir. Bu yazıda, Scrapy’ye bir proxy’nin nasıl bağlanacağı, rotasyon veya sabit oturumun nasıl ayarlanacağı ve ortaya çıkan hataların nasıl giderileceği anlatılmaktadır.

Scrapy’nin neden bir proxy’ye ihtiyacı var?

Scrapy için proxy’ler, aracın her zaman onu çalıştıran makinenin IP adresini kullanmak yerine farklı bir IP adresi üzerinden bağlanmasını sağlar. Bu, konum tabanlı görevler, testler, izleme ve bağlantı kaynağının önemli olduğu diğer işler için yararlıdır.

Scrapy yine de ana görevi yerine getirir. Proxy ise bağlantının nereden geldiğiyle ilgilenir.

Proxy olmadan ne olur: IP engellemeleri, hız sınırlamaları, coğrafi kısıtlamalar

Proxy olmadan, web siteleri sürekli aynı IP adresini görür. Etkinlik arttıkça, bu IP adresi bir hız sınırına ulaşabilir veya engellenebilir.

Konum da önemli olabilir. Almanya'dan açılan bir sayfa, ABD'den açılan bir sayfayla aynı içeriği göstermeyebilir.

Scrapy için bir proxy, gerektiğinde farklı IP adreslerinden ve konumlardan bağlanmayı mümkün kılar.

Scrapy ile hangi proxy türü kullanılmalı

Doğru proxy türü, işin niteliğine bağlıdır.

Proxy türüVeri toplamaHesap yönetimiTestİzleme
KonutKonum ve IP kaynağının önemli olduğu durumlarda uygundurHesaplar için konut IP'leri gerektiğinde kullanışlıdırKonum tabanlı testler için uygundurFarklı konumlardan gelen içeriği kontrol etmek için kullanışlıdır
İSSSabit bir IP gerektiğinde uygundurTek bir IP üzerinden uzun süreli oturumlar için kullanışlıdırTutarlı bir IP ile test yapmak için uygundurAynı IP'den sürekli kontroller yapmak için kullanışlıdır
Veri merkeziHız ve yüksek istek hacimleri için uygundurEv tipi IP'lere ihtiyaç duyulmadığında daha iyidirGenel testler için uygundurSık otomatik kontroller için uygundur

Konut proxy'leri, IP kaynağı ve konumun önemli olduğu durumlarda kullanışlıdır. İSS proxy'leri, aynı IP'nin daha uzun süre aktif kalması gerektiğinde iyi sonuç verir. Veri merkezi proxy'leri ise odak noktasının hız ve ölçek olduğu durumlarda mantıklıdır.

En iyi seçenek, görevin coğrafi hedefleme, istikrarlı bir bağlantı veya daha geniş bir IP havuzuna erişim gerektirip gerektirmediğine de bağlıdır.

Scrapy'de proxy nasıl bağlanır

Scrapy proxy kurulumunda Geonode adresindeki sunucu, bağlantı noktası, kullanıcı adı ve şifre gereklidir. Kimlik bilgilerini ortam değişkenlerinde saklayın, ardından kodda proxy'yi kurarken bunları yükleyin.

Geonode kullanıyor musunuz? Kullanıcı adını ve şifreyi Erişim Kimlik Bilgileri bölümünden, ana bilgisayarı, bağlantı noktasını ve protokolü ise Proxy Sunucu Bilgileri bölümünden alın.

Ayar yolu veya kod

Testimiz için bir indirme aracı ara yazılımı ekledik:

DOWNLOADER_MIDDLEWARES = {
    "geonode_scrapy.middlewares.GeonodeProxyMiddleware": 350,
    "scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware": 400,
}

Bu ara yazılım, proxy URL'sini request.meta["proxy"]

adresinden geçirir; Scrapy'nin HttpProxyMiddleware

adresi de bunu kullanır:

request.meta["proxy"] = proxy_url

Proxy'yi tek bir isteğe doğrudan da aktarabilirsiniz:

yield scrapy.Request(
    url,
    meta={"proxy": proxy_url},
)

Gerçek kullanıcı adını ve şifreyi Python dosyasına doğrudan yazmak yerine ortam değişkenlerinde saklayın. Bu kurulum, testimiz sırasında proxy üzerinden HTTP 200 yanıtını başarıyla döndürdü.

Kimlik doğrulama biçimi host:port:user:pass

Geonode

size dört değer verir:

proxy.geonode.io:PORT:USERNAME:PASSWORD

Scrapy, bir proxy URL’siyle aynı bilgilere ihtiyaç duyar:

http://USERNAME:PASSWORD@proxy.geonode.io:PORT

Kimlik bilgilerini veya tam proxy değerini bir ortam değişkeninde saklayın:

GEONODE_PROXY_URL=http://USERNAME:PASSWORD@proxy.geonode.io:PORT

Ardından bunu Python’da yükleyin:

import os

proxy_url = os.environ["GEONODE_PROXY_URL"]

HTTP testimiz için ortaya çıkan biçim şuydu:

http://USERNAME:PASSWORD@proxy.geonode.io:9000

Kimlik doğrulamayı kontrol etmek için, isteği yanlış kimlik bilgileriyle de çalıştırdık. Scrapy, şu yanıtla birlikte HTTP 407 hatası aldı:

Authentication error. Please check your authentication settings.

Scrapy, yanıtı HttpErrorMiddleware

üzerinden HttpError('Ignoring non-200 response')

olarak görüntüledi.

Scrapy’de Rotasyon ve Sabit Oturum Karşılaştırması

İsteklerin aynı IP adresini koruması gerekmiyorsa, rotasyon kullanın.

Testimiz için, dönen Geonode

proxy’sini Scrapy’ye aktardık:

proxy_url = "http://USERNAME:PASSWORD@proxy.geonode.io:9000"

yield scrapy.Request(
    url,
    meta={"proxy": proxy_url},
)

Arka arkaya beş istek gönderdik:

Request 1: 101.98.231.191
Request 2: 101.98.231.191
Request 3: 101.98.231.191
Request 4: 122.164.83.189
Request 5: 122.164.83.189

Unique IPs: 2
Rotation: Yes

Test, rotasyonun gerçekleştiğini doğruladı, ancak IP adresi her istekte değişmedi.

İlgili isteklerin aynı IP adresinde kalması gerekiyorsa, bunun yerine sabit oturum kullanın:

proxy_url = (
    "http://USERNAME-session-blogtest01-lifetime-10:"
    "PASSWORD@proxy.geonode.io:10000"
)

Aynı oturumu kullanarak üç istek gönderdik:

Request 1: 177.73.202.78
Request 2: 177.73.202.78
Request 3: 177.73.202.78

Same IP: Yes

Testimizde üç istek de aynı IP adresini kullandı.

Kullanılabilir ayarlar için dönüşümlü proxy'ler ve sabit oturumlar hakkındaki Geonode

kılavuzlarına bakın.

Scrapy'de sık karşılaşılan proxy hataları ve bunların çözümleri

Proxy çalışmıyorsa, öncelikle bağlantı bilgilerini kontrol edin. Kullanıcı adını ve şifreyi, ardından ana bilgisayarı, bağlantı noktasını ve protokolü kontrol edin. Scrapy tarafından döndürülen hata mesajı genellikle sorunun kaynağını belirlemenize yardımcı olabilir.

407 Proxy Kimlik Doğrulaması Gerekiyor

407 hatası genellikle bir kimlik doğrulama sorununa işaret eder.

Scrapy'yi yanlış kimlik bilgileriyle test ettiğimizde, proxy şu yanıtı verdi:

HTTP status: 407
Authentication error. Please check your authentication settings.

Öncelikle kullanıcı adını ve şifreyi kontrol edin. Bunlar doğruysa, Scrapy'nin şema, kimlik bilgileri, ana bilgisayar ve bağlantı noktası dahil olmak üzere tam proxy URL'sini aldığından emin olun.

ERR_TUNNEL_CONNECTION_FAILED / bağlantı reddedildi

Bir bağlantı hatası genellikle Scrapy’nin proxy’ye ulaşamadığı anlamına gelir.

Öncelikle ana bilgisayar adresini ve bağlantı noktasını kontrol edin. Ardından protokolün kullanılan proxy sunucusuyla uyumlu olduğundan emin olun.

Scrapy, her zaman tarayıcı tarzı ERR_TUNNEL_CONNECTION_FAILED yanıtını döndürmez. Başarısız bağlantı testimizde, Scrapy isteği yeniden denedi ve sonunda Twisted ConnectionLost hatasını içeren DownloadFailedError yanıtını döndürdü.

Zaman Aşımları ve Boş Yanıtlar

Zaman aşımı, isteğin ayarlanan süre içinde bir yanıt almamış olduğu anlamına gelir.

Öncelikle, hedef URL’nin çalışıp çalışmadığını ve proxy’nin bağlanıp bağlanamadığını kontrol edin. Her ikisi de çalışıyorsa, Scrapy’deki zaman aşımı ayarlarını kontrol edin.

Bağlantı hatası testimiz için, DOWNLOAD_TIMEOUT=5

adresinde geçersiz bir proxy bağlantı noktası kullandık. Yeniden denemelerin ardından Scrapy şu yanıtı verdi:

DownloadFailedError(
  ConnectionLost:
  Connection to the other side was lost in a non-clean fashion.
)

Dolayısıyla, başarısız bir proxy bağlantısı, basit bir zaman aşımı mesajı yerine bir bağlantı hatası olarak görünebilir.

Scrapy’ye özgü bir hata

Scrapy’ye özgü, kolayca yapılabilecek bir hata, request.meta["proxy"]

adresine eksik bir değer aktarmaktır.

Testimizde, şema veya kimlik bilgileri olmadan

proxy.geonode.io:9000

adresini kullandık. İstek, HTTP 407 hatası döndürdü.

Bunu düzeltmek için tam proxy URL'sini aktarmak gerekti:

http://USERNAME:PASSWORD@proxy.geonode.io:9000

ya da indirici ara yazılımının bunu ortam değişkenlerinden oluşturmasına izin vermek.

Scrapy + Geonode: Ne elde edersiniz?

Scrapy, uygulamadaki istekleri veya bağlantıları yönetir. Geonode ise proxy bağlantısını yönetir.

İşe göre ev, ISP veya veri merkezi proxy'leri seçebilir, ardından gerektiğinde rotasyon, sabit oturumlar ve coğrafi hedefleme özelliklerini kullanabilirsiniz. Bu sayede proxy kurulumu, uygulama kodunun geri kalanından ayrı tutulur.

Planlar proxy türüne göre değişir; bazı seçeneklerin fiyatı GB başına belirlenir.

Sık Sorulan Sorular

Scrapy, SOCKS5 proxy'lerini destekliyor mu?

Test ettiğimiz Scrapy sürümünde SOCKS5 için ek bir kurulum gerekiyor.

socks5:// proxy'sini Scrapy'nin varsayılan HTTP işleyicisi üzerinden geçirme denemesi şu hatayla sonuçlandı:

UnsupportedURLSchemeError("Unsupported scheme: b'socks5'")

Ardından httpx2[socks] adresini yükledik ve Scrapy’nin deneysel HttpxDownloadHandler ayarını yapılandırdık. 11000 numaralı bağlantı noktasında SOCKS5 dönen proxy kullanıldığında, istek HTTP 200 statüsüyle başarılı oldu ve bir proxy IP’si döndü. Bu işleyici deneysel nitelikte olduğundan, üretim ortamında kullanılması tavsiye edilmez; daha çok test amaçlı kullanıma uygundur.

Scrapy'de istek başına IP adreslerini dönüşümlü olarak kullanabilir miyim?

Evet, Scrapy istekleri dönüşümlü bir proxy üzerinden gönderebilir, ancak her istek için farklı bir IP adresi garanti edilmez.

Beş istekten oluşan testimizde iki farklı IP adresi elde ettik. İlk üç istek tek bir IP adresini paylaşırken, son iki istek başka bir IP adresini paylaştı; bu da test sırasında rotasyonun gerçekleştiğini doğruladı.

Ücretsiz deneme sürümü var mı?

Evet. Geonode ücretsiz bir deneme sürümü sunuyor; böylece ücretli bir plana geçmeden önce proxy, Scrapy ile test edilebilir. Güncel ücretsiz deneme sürümünü ve planları inceleyin.

Scrapy'de proxy ayarlarını nerede yapmalıyım?

Tek bir istek için, proxy ayarlarını request.meta["proxy"] aracılığıyla aktarın.

Aynı proxy ayarının birçok istekte kullanılması gerekiyorsa, downloader ara yazılımı proxy mantığını tek bir yerde tutar. Yaptığımız testte, özel ara yazılım, Scrapy'nin yerleşik HttpProxyMiddleware işlevi isteği işlemeden önce request.meta["proxy"] ayarını belirlemiştir.

Scrapy örümceğim neden çalışıyor ama 0 istek gönderiyor?

Örümceğin ilk isteklerini nasıl oluşturduğunu kontrol edin.

Scrapy 2.19 testimizde, yalnızca eski start_requests()

yöntemini tanımlamak, örümceğin sıfır istekle açılıp kapanmasına neden oldu. Asenkron start()

yöntemini kullanmak bu sorunu çözdü:

async def start(self):
    yield scrapy.Request(...)

Bu, test ettiğimiz kurulum sırasında kaydedilen davranıştı.