Limpia una lista de proxies IP:puerto con Python
Valida un archivo IPv4 simple, normaliza puertos y elimina duplicados conservando distintos puertos de una misma IP.
Pon una entrada IPv4 IP:port por línea en proxies.txt. Todas deben pertenecer a un único protocolo proxy conocido. Si las recopilas de la lista de proxies gratuitos, separa los protocolos antes de preparar esta entrada de texto. La limpieza no admite URL con credenciales, columnas CSV ni direcciones IPv6.
Guarda este script de la biblioteca estándar como clean-proxies.py en el mismo directorio:
from ipaddress import IPv4Address
from pathlib import Path
seen = set()
cleaned = []
for number, raw in enumerate(
Path("proxies.txt").read_text(encoding="utf-8").splitlines(),
start=1,
):
text = raw.strip()
if not text:
continue
try:
host, port_text = text.rsplit(":", 1)
host = str(IPv4Address(host))
port = int(port_text)
if not 1 <= port <= 65535:
raise ValueError("port out of range")
except ValueError:
print(f"Skipping line {number}: invalid IPv4 endpoint")
continue
endpoint = (host, port)
if endpoint not in seen:
seen.add(endpoint)
cleaned.append(f"{host}:{port}")
output = "\n".join(cleaned)
Path("proxies-clean.txt").write_text(
output + ("\n" if output else ""),
encoding="utf-8",
)
print(f"Saved {len(cleaned)} endpoints")
Ejecútalo desde ese directorio:
uv run --no-project python clean-proxies.py
Revisa los avisos de líneas omitidas y proxies-clean.txt; el archivo de entrada permanece intacto. La salida conserva el orden de primera aparición y elimina duplicados por dirección más puerto numérico. Dos copias de 203.0.113.10:8080 y una de 203.0.113.10:3128 producen dos puntos. El puerto decimal 08080 se normaliza a 8080.
Las direcciones de documentación solo ilustran el formato. La sintaxis IPv4 válida incluye direcciones privadas y de uso especial, por lo que una entrada limpia no es necesariamente accesible públicamente. Añade una política explícita de direcciones si necesitas una lista solo pública.
Para entradas HTTP/SOCKS mezcladas, conserva el protocolo en archivos separados o una columna; no lo deduzcas del puerto 1080. Usa un analizador de IPv6 entre corchetes si ese es el formato real. Este script rechaza entradas incompatibles en vez de adivinar, y su salida no dice nada de disponibilidad, anonimato, país o velocidad. Eso requiere pruebas de conexión controladas.