Poimi välityspalvelimen päätepisteet yksi taulukkorivi kerrallaan
Pidä IP-osoitteet portteihinsa liitettyinä ja validoi kentät, kun jäsennät tallennettua välityspalvelinluettelon HTML-taulukkoa.
Jäsennä jokainen välityspalvelinrivi yhtenä kokonaisuutena. Jos litistät kaikki täsmäävät td:t sivun yli ja ryhmittelet tulokset kiinteän määrän mukaan, yhden rivin osoite voi pariutua seuraavan rivin portin kanssa, kun solu puuttuu tai toinen taulukko ilmestyy.
Sovelluksen jo hakemalle HTML:lle taulukko, jonka kaksi ensimmäistä saraketta ovat IP-osoite ja portti, voidaan jäsentää näin:
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 ovat sovelluksen syötteitä. Valitse valitsin ja sarakkeiden yhdistäminen lähteen todellisen merkintätavan perusteella. Ilmainen välityspalvelinluettelo on yksi päätepistetietueiden lähde, mutta sen rivit kannattaa tutkia ennen kyseisen yhdistämisen valintaa. Ei historiallinen taulukkotunnus eikä väite, että sivu sisältää täsmälleen 300 tietuetta, ole pysyvä skeema.
Joukko poistaa päällekkäiset osoite-portti-parit säilyttäen kunkin parin yhteyden. Odottamaton nollatuloksen tuonti tulee silti tutkia: taulukko on voinut muuttua tai haettu asiakirja voi olla luettelon sijaan haastesivu.
Säilytä ilmoitettu protokolla ja tarkistusaikakentät päätepisteen yhteydessä, kun niillä on merkitystä. Uskottavan IP:n ja portin poimiminen osoittaa vain muodon, ei sitä että päätepiste tarjoaa nyt toimivaa HTTP- tai SOCKS-palvelua.
Otsikko- tai suodatinrivit eivät ole päätepisteitä. Vain th-soluja sisältävä rivi ohitetaan, kun taas tyhjät tai ei-osoitekentät epäonnistuvat validoinnissa. Älä hylkää ensimmäistä ja viimeistä riviä sijainnin perusteella: kumpi tahansa voi olla todellinen päätepiste sivun asettelun muututtua.