
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 = 10Observações que poupam tempo
A ordem importa: o middleware de proxy precisa rodar antes do de retry, assim cada nova tentativa escolhe um proxy diferente em vez de repetir o que falhou. Mantenha DOWNLOAD_TIMEOUT baixo — proxies gratuitos são a parte mais lenta do pipeline — e aumente RETRY_TIMES para absorver a taxa de falha.
Guias relacionados
Limites do snapshot público
Proxies públicos gratuitos são compartilhados e operados por terceiros desconhecidos. Nunca envie senhas, tokens ou dados pessoais por eles. Siga as políticas de uso aceitável do GitHub: nada de spam, ataques, contorno de controles de acesso ou coleta contrária às políticas do site.
Proxies públicos gratuitos são compartilhados e operados por terceiros desconhecidos. Nunca envie senhas, tokens ou dados pessoais por eles. Siga as políticas de uso aceitável do GitHub: nada de spam, ataques, contorno de controles de acesso ou coleta contrária às políticas do site.