Inicio / Casos de uso / Scrapy
Proxies gratis para Scrapy
Scrapy tiene soporte de proxy integrado con request.meta['proxy']. Combínalo con una lista gratuita verificada cada hora y un pequeño middleware de rotación.
Middleware de proxy rotativo
Coloca este middleware en tu proyecto y actívalo en settings.py. Carga la lista verificada una vez, asigna un proxy aleatorio por petición y reintenta con otro cuando un proxy falla.
# middlewares.py
import random, requests
class VerifiedProxyMiddleware:
LIST = "https://raw.githubusercontent.com/xyzs996/free-proxy-health-list/main/proxies/protocols/http/data.txt"
def __init__(self):
txt = requests.get(self.LIST, timeout=15).text
self.proxies = [f"http://{l.strip()}" for l in txt.splitlines() if l.strip()]
def process_request(self, request, spider):
request.meta["proxy"] = random.choice(self.proxies)
def process_exception(self, request, exception, spider):
request.meta["proxy"] = random.choice(self.proxies)
return request
# settings.py
DOWNLOADER_MIDDLEWARES = {
"myproject.middlewares.VerifiedProxyMiddleware": 350,
"scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware": 400,
}
RETRY_ENABLED = True
RETRY_TIMES = 5
DOWNLOAD_TIMEOUT = 15
DOWNLOAD_DELAY = 1.0
Consejos
Los proxies gratuitos son inestables: mantén RETRY_ENABLED y da un RETRY_TIMES generoso. Empieza por el subconjunto rápido y recarga la lista entre rastreos largos. Respeta siempre el robots.txt.
Preguntas frecuentes
¿Cómo pongo un proxy en Scrapy?
Define request.meta['proxy'] = 'http://host:port', o exporta http_proxy.
¿Scrapy admite SOCKS5?
El middleware por defecto maneja HTTP; para SOCKS necesitas un handler externo.
¿De dónde sale la lista?
Descarga la lista verificada en TXT o JSON desde el CDN; se recomprueba cada hora.