Limpa unha lista de proxys IP:porto con Python
Valida un ficheiro IPv4 simple, normaliza portos e elimina duplicados conservando distintos portos dunha mesma IP.
Pon unha entrada IPv4 IP:port por liña en proxies.txt. Todas deben pertencer a un único protocolo proxy coñecido. Se as recolles da lista de proxys gratuítos, separa os protocolos antes de preparar esta entrada textual. A limpeza non acepta URL con credenciais, columnas CSV nin enderezos IPv6.
Garda este script da biblioteca estándar como clean-proxies.py no mesmo 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")
Execútao desde ese directorio:
uv run --no-project python clean-proxies.py
Revisa os avisos de liñas omitidas e proxies-clean.txt; o ficheiro de entrada queda intacto. A saída conserva a orde de primeira aparición e elimina duplicados por enderezo máis porto numérico. Dúas copias de 203.0.113.10:8080 e unha de 203.0.113.10:3128 producen dous puntos. O porto decimal 08080 normalízase a 8080.
Os enderezos de documentación só ilustran o formato. A sintaxe IPv4 válida inclúe enderezos privados e especiais, polo que unha entrada limpa non é necesariamente accesible publicamente. Engade unha política explícita de enderezos se necesitas unha lista só pública.
Para entrada HTTP/SOCKS mixta, conserva o protocolo en ficheiros separados ou nunha columna; non o deduzas do porto 1080. Usa un analizador de IPv6 entre corchetes se ese é o formato real. O script rexeita entradas non admitidas en vez de adiviñar, e a saída non informa de dispoñibilidade, anonimato, país nin velocidade. Iso require probas de conexión controladas.