Parsirajte svaki proxy red kao jednu cjelinu. Ako spljoštite sve odgovarajuće td na stranici i grupišete rezultate po fiksnom broju, adresa iz jednog reda može se upariti s portom iz sljedećeg kada nedostaje ćelija ili se pojavi druga tabela.

Za HTML koji je aplikacija već dobila, tabela čije su prve dvije kolone 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 su ulazi aplikacije. Odaberite selektor i mapiranje kolona prema stvarnom markupu izvora. Besplatna proxy lista jedan je izvor zapisa o krajnjim tačkama, ali njene redove treba pregledati prije nego što odaberete to mapiranje. Ni istorijski ID tabele ni tvrdnja da stranica sadrži tačno 300 zapisa nisu trajna šema.

Skup uklanja duplikate parova adresa-port uz zadržavanje veze svakog para. Neočekivani uvoz s nula rezultata ipak treba istražiti: tabela se možda promijenila ili preuzeti dokument može biti stranica provjere umjesto liste.

Zadržite najavljeni protokol i polja vremena provjere uz krajnju tačku kada su važna. Izdvajanje vjerodostojnog IP-a i porta dokazuje samo format, ne da krajnja tačka trenutno pruža ispravnu HTTP ili SOCKS uslugu.

Redovi zaglavlja ili filtera nisu krajnje tačke. Red sa samo th ćelijama se preskače, a prazna ili neadresna polja ne prolaze validaciju. Ne odbacujte prvi i zadnji red po poziciji: bilo koji može biti stvarna krajnja tačka nakon promjene izgleda stranice.

Povezani članci