Մաքրեք 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 է, օգտագործեք համապատասխան վերլուծիչ։ Սկրիպտը մերժում է չաջակցվող մուտքը՝ գուշակելու փոխարեն, իսկ ելքը չի հայտնում հասանելիություն, անանունություն, երկիր կամ արագություն։ Դրանք պահանջում են վերահսկվող կապի փորձարկումներ։