
1. Rotación con conteo de fallos
import collections, itertools, requests
proxies = [l.strip() for l in open("proxies.txt") if l.strip()]
failures = collections.Counter()
pool = itertools.cycle(proxies)
def get(url, attempts=10):
for _ in range(attempts):
proxy = next(pool)
if failures[proxy] >= 3:
continue
try:
return requests.get(
url,
proxies={"http": f"http://{proxy}", "https": f"http://{proxy}"},
timeout=8,
)
except requests.RequestException:
failures[proxy] += 1
raise RuntimeError("pool exhausted")Notas que ahorran tiempo
Contar fallos por proxy y saltarse a los reincidentes es lo que convierte una lista en bruto en un pool usable; sin eso sigues pagando el timeout de las mismas entradas muertas. Refresca el fichero al ritmo de publicación y reinicia el contador al hacerlo. Para cargas de producción donde no puedes absorber esta tasa de fallo, un endpoint rotativo mantenido es la herramienta adecuada.
Guías relacionadas
Límites de la instantánea pública
Los proxies públicos gratuitos son compartidos y los operan terceros desconocidos. Nunca envíes contraseñas, tokens ni datos personales a través de ellos. Cumple las políticas de uso aceptable de GitHub: nada de spam, ataques, elusión de controles de acceso ni scraping contrario a las políticas del sitio.
Los proxies públicos gratuitos son compartidos y los operan terceros desconocidos. Nunca envíes contraseñas, tokens ni datos personales a través de ellos. Cumple las políticas de uso aceptable de GitHub: nada de spam, ataques, elusión de controles de acceso ni scraping contrario a las políticas del sitio.