Очистка списка прокси 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 в скобках используйте соответствующий парсер. Скрипт отвергает неподдерживаемый ввод, а не угадывает. Вывод ничего не говорит о доступности, анонимности, стране или скорости. Для этого нужны контролируемые проверки соединения.