Pars kvar proxy-rad som éi eining. Viss du flatar ut alle samsvarande td over sida og grupperer resultata etter eit fast tal, kan ei adresse frå éi rad bli para med ein port frå den neste når ein celle manglar eller ein annan tabell dukkar opp.

For HTML som applikasjonen allereie har henta, kan ein tabell der dei to første kolonnane er IP-adresse og port parsast slik:

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 og table_selector er inndata til applikasjonen. Vel selektoren og kolonnetilordninga ut frå den faktiske markeringa til kjelda. Gratis proxy-liste er éi kjelde til endepunktspostar, men radene bør undersøkjast før den tilordninga blir vald. Korkje ein historisk tabell-ID eller påstanden om at ei side inneheld nøyaktig 300 postar er eit varig skjema.

Settet fjernar dupliserte adresse-og-port-par og bevarar samtidig koplinga i kvart par. Ein uventa import med null resultat bør likevel undersøkjast: tabellen kan ha endra seg, eller det henta dokumentet kan vere ei utfordringsside i staden for lista.

Hald eventuelle kunngjorde protokoll- og kontrolltidsfelt saman med endepunktet når dei har noko å seie. Å trekkje ut ein truverdig IP og port fastset formatet, ikkje at endepunktet no leverer ein fungerande HTTP- eller SOCKS-teneste.

Hovud- eller filterrader er ikkje endepunkt. Ei rad som berre inneheld th-celler, blir hoppa over, medan tomme eller ikkje-adressefelt feilar i valideringa. Ikkje kast første og siste rad etter posisjon: begge kan vere eit ekte endepunkt etter at sideoppsettet endrar seg.

Relaterte artiklar