Limpe uma lista de proxies IP:porta com Python
Valide um arquivo IPv4 simples, normalize portas e remova duplicatas preservando portas diferentes no mesmo IP.
Coloque uma entrada IPv4 IP:port por linha em proxies.txt. Todas devem pertencer a um único protocolo de proxy conhecido. Se vierem da lista de proxies grátis, separe os protocolos antes de preparar essa entrada de texto. A limpeza não aceita URLs com credenciais, colunas CSV nem endereços IPv6.
Salve este script que usa a biblioteca padrão como clean-proxies.py no mesmo diretório:
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")
Execute-o nesse diretório:
uv run --no-project python clean-proxies.py
Confira os avisos de linhas ignoradas e proxies-clean.txt; o arquivo de entrada permanece intacto. A saída preserva a ordem da primeira ocorrência e elimina duplicatas por endereço mais porta numérica. Duas cópias de 203.0.113.10:8080 e uma de 203.0.113.10:3128 produzem dois endpoints. A porta decimal 08080 é normalizada para 8080.
Os endereços de documentação ilustram apenas o formato. A sintaxe IPv4 válida inclui endereços privados e especiais, portanto uma entrada limpa não é necessariamente acessível publicamente. Adicione uma política explícita de endereços se precisar de uma lista apenas pública.
Para entrada HTTP/SOCKS misturada, mantenha o protocolo em arquivos separados ou em uma coluna; não o deduza da porta 1080. Use um parser de IPv6 entre colchetes se esse for o formato real. Este script rejeita entradas não compatíveis em vez de adivinhar, e a saída nada diz sobre disponibilidade, anonimato, país ou velocidade. Isso exige testes de conexão controlados.