Rensa en IP:port-proxylista med Python
Kontrollera en enkel IPv4-fil, normalisera portar och ta bort dubbletter men behåll olika portar på samma IP.
Lägg en IPv4-post IP:port per rad i proxies.txt. Alla poster måste tillhöra ett känt proxyprotokoll. Om du samlar dem från listan över gratis proxyer, dela upp protokollen innan du skapar denna textinmatning. Rensningen godtar inte URL:er med inloggningsuppgifter, CSV-kolumner eller IPv6-adresser.
Spara detta skript med standardbiblioteket som clean-proxies.py i samma katalog:
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")
Kör det från den katalogen:
uv run --no-project python clean-proxies.py
Granska meddelanden om överhoppade rader och proxies-clean.txt; indatafilen förblir orörd. Utdata behåller ordningen för första förekomst och tar bort dubbletter efter adress plus numerisk port. Två kopior av 203.0.113.10:8080 och en av 203.0.113.10:3128 ger två ändpunkter. Decimalporten 08080 normaliseras till 8080.
Dokumentationsadresserna visar bara formatet. Giltig IPv4-syntax omfattar privata och särskilda adresser, så en rensad post är inte nödvändigtvis offentligt nåbar. Lägg till en uttrycklig adresspolicy för en lista med enbart offentliga adresser.
För blandad HTTP/SOCKS-indata, behåll protokollet i separata filer eller en kolumn; härled det inte från port 1080. Använd en parser för IPv6 inom hakparenteser om det är det faktiska formatet. Skriptet avvisar indata som inte stöds i stället för att gissa, och utdata säger inget om tillgänglighet, anonymitet, land eller hastighet. Det kräver kontrollerade anslutningstester.