Parsige iga puhverserveri rida eraldi üksusena. Kui laotada kõik sobivad td üle lehe laiali ja rühmitada tulemused kindla arvu järgi, võib ühest reast pärit aadress siduda järgmise rea pordiga, kui lahter puudub või ilmub teine tabel.

HTML-i puhul, mille rakendus on juba hankinud, saab tabelit, mille kaks esimest veergu on IP-aadress ja port, parsida nii:

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 ja table_selector on rakenduse sisendid. Valige selektor ja veergude kaardistus allika tegeliku märgistuse järgi. Tasuta puhverserverite nimekiri on üks lõpp-punkti kirjete allikas, kuid enne selle kaardistuse valimist tuleks selle ridu uurida. Ei ajalooline tabeli ID ega väide, et leht sisaldab täpselt 300 kirjet, ole püsiv skeem.

Hulk eemaldab korduvad aadressi-porti paarid, säilitades samal ajal iga paari seose. Ootamatu nullitulemusega import tuleb siiski uurida: tabel võib olla muutunud või hangitud dokument võib olla nimekirja asemel väljakutseleht.

Kui need on olulised, hoidke lõpp-punkti juures ka teatatud protokoll ja kontrolliaja väljad. Usutava IP ja pordi eraldamine tõestab ainult vormingut, mitte et lõpp-punkt pakub praegu toimivat HTTP- või SOCKS-teenust.

Päise- või filtriread ei ole lõpp-punktid. Rida, mis sisaldab ainult th-lahterid, jäetakse vahele, samas kui tühjad või mitteaadressiväljad ei läbi valideerimist. Ärge visake esimest ja viimast rida asukoha järgi ära: pärast lehe paigutuse muutumist võib kumbki olla tõeline lõpp-punkt.

Seotud artiklid