Ачыстка спіса проксі IP:порт з дапамогай Python
Праверце просты IPv4-файл, нармалізуйце парты і выдаліце дублікаты, захаваўшы розныя парты аднаго IP.
Запішыце па адным IPv4-запісе IP:port у радку файла proxies.txt. Усе запісы павінны належаць аднаму вядомаму пратаколу проксі. Збіраючы іх са спіса бясплатных проксі, раздзяліце пратаколы да падрыхтоўкі гэтага тэкставага ўводу. Ачыстка не прымае URL з уліковымі данымі, слупкі CSV ці адрасы IPv6.
Захавайце гэты скрыпт са стандартнай бібліятэкай як clean-proxies.py у тым самым каталогу:
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")
Запусціце яго з гэтага каталога:
uv run --no-project python clean-proxies.py
Праверце паведамленні пра прапушчаныя радкі і proxies-clean.txt; уваходны файл застаецца цэлым. Вывад захоўвае парадак першага з’яўлення і выдаляе дублікаты паводле адраса разам з лікавым портам. Дзве копіі 203.0.113.10:8080 і адна 203.0.113.10:3128 даюць два вузлы. Дзесятковы порт 08080 нармалізуецца ў 8080.
Дакументацыйныя адрасы паказваюць толькі фармат. Дапушчальны сінтаксіс IPv4 уключае прыватныя і спецыяльныя адрасы, таму ачышчаны запіс не абавязкова публічна даступны. Для спіса толькі публічных адрасоў дадайце яўную адрасную палітыку.
У змешаным уводзе HTTP/SOCKS захоўвайце пратакол у асобных файлах ці слупку; не вызначайце яго па порце 1080. Для сапраўднага фармату IPv6 у дужках выкарыстоўвайце адпаведны парсер. Скрыпт адхіляе непадтрыманы ўвод, а не адгадвае. Вывад нічога не кажа пра даступнасць, ананімнасць, краіну ці хуткасць. Патрэбныя кантраляваныя тэсты злучэння.