
1. middlewares.py
import itertools, random
class RotatingProxyMiddleware:
def __init__(self):
with open("proxies.txt") as handle:
self.proxies = [line.strip() for line in handle if line.strip()]
random.shuffle(self.proxies)
self.pool = itertools.cycle(self.proxies)
def process_request(self, request, spider):
request.meta["proxy"] = f"http://{next(self.pool)}"2. settings.py
DOWNLOADER_MIDDLEWARES = {
"myproject.middlewares.RotatingProxyMiddleware": 350,
"scrapy.downloadermiddlewares.retry.RetryMiddleware": 550,
}
RETRY_TIMES = 5
DOWNLOAD_TIMEOUT = 10Zaman kazandıran notlar
Sıra önemlidir: proxy ara katmanı yeniden deneme ara katmanından önce çalışmalı ki her deneme başarısız olanı tekrarlamak yerine yeni bir proxy seçsin. DOWNLOAD_TIMEOUT'u düşük tutun — ücretsiz proxy'ler hattın en yavaş parçasıdır — ve hata oranını karşılamak için RETRY_TIMES'ı yükseltin.
İlgili rehberler
Genel anlık görüntü sınırları
Ücretsiz genel proxy'ler paylaşımlıdır ve kimliği bilinmeyen taraflarca işletilir. Asla parola, token veya kişisel veri göndermeyin. GitHub Kabul Edilebilir Kullanım Politikalarına uyun: spam yok, saldırı yok, erişim denetimlerini aşma yok, site politikalarına aykırı kazıma yok.
Ücretsiz genel proxy'ler paylaşımlıdır ve kimliği bilinmeyen taraflarca işletilir. Asla parola, token veya kişisel veri göndermeyin. GitHub Kabul Edilebilir Kullanım Politikalarına uyun: spam yok, saldırı yok, erişim denetimlerini aşma yok, site politikalarına aykırı kazıma yok.