Izdvojite proxy završne točke red po red tablice
Držite IP adrese povezane s njihovim portovima i provjerite polja pri parsiranju spremljene HTML tablice popisa proxyja.
Parsirajte svaki proxy red kao jednu cjelinu. Ako spljoštite sve odgovarajuće td na stranici i grupirate rezultate po fiksnom broju, adresa iz jednog retka može se upariti s portom iz sljedećeg kada nedostaje ćelija ili se pojavi druga tablica.
Za HTML koji je aplikacija već dobila, tablica čija su prva dva stupca IP adresa i port može se parsirati ovako:
import ipaddress
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, "html.parser")
table = soup.select_one(table_selector)
if table is None:
raise ValueError("Expected proxy table was not found")
endpoints = set()
for row in table.select("tbody tr"):
cells = row.find_all("td", recursive=False)
if len(cells) < 2:
continue
try:
address = ipaddress.ip_address(cells[0].get_text(strip=True))
port = int(cells[1].get_text(strip=True))
except ValueError:
continue
if 1 <= port <= 65535:
endpoints.add((str(address), port))html i table_selector ulazi su aplikacije. Odaberite selektor i mapiranje stupaca prema stvarnom označavanju izvora. Besplatni popis proxyja jedan je izvor zapisa o završnim točkama, ali njegove retke treba pregledati prije odabira tog mapiranja. Ni povijesni ID tablice ni tvrdnja da stranica sadrži točno 300 zapisa nisu trajna shema.
Skup uklanja duplikate parova adresa-port uz zadržavanje veze svakog para. Neočekivani uvoz s nula rezultata ipak treba istražiti: tablica se možda promijenila ili preuzeti dokument može biti stranica provjere umjesto popisa.
Zadržite najavljeni protokol i polja vremena provjere uz završnu točku kada su važna. Izdvajanje vjerodostojne IP adrese i porta dokazuje samo format, ne da završna točka trenutačno pruža ispravnu HTTP ili SOCKS uslugu.
Redci zaglavlja ili filtra nisu završne točke. Redak sa samo th ćelijama preskače se, a prazna ili neadresna polja ne prolaze validaciju. Ne odbacujte prvi i zadnji redak prema položaju: bilo koji može biti stvarna završna točka nakon promjene izgleda stranice.