Parse hver proxy-rad som én enhet. Hvis du flater ut alle samsvarende td over siden og grupperer resultatene etter et fast antall, kan en adresse fra én rad bli paret med en port fra den neste når en celle mangler eller en annen tabell dukker opp.

For HTML som applikasjonen allerede har hentet, kan en tabell der de to første kolonnene er IP-adresse og port parses 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. Velg selektoren og kolonnetilordningen ut fra kildens faktiske markup. Gratis proxy-liste er én kilde til endepunktsposter, men radene bør undersøkes før den tilordningen velges. Verken en historisk tabell-ID eller påstanden om at en side inneholder nøyaktig 300 poster er et varig skjema.

Settet fjerner dupliserte adresse-og-port-par og bevarer samtidig koblingen i hvert par. En uventet import med null resultater bør likevel undersøkes: tabellen kan ha endret seg, eller det hentede dokumentet kan være en utfordringsside i stedet for listen.

Behold eventuelle annonserte protokoll- og kontrolltidsfelt sammen med endepunktet når de betyr noe. Å trekke ut en troverdig IP og port fastslår formatet, ikke at endepunktet for tiden leverer en fungerende HTTP- eller SOCKS-tjeneste.

Hode- eller filterrader er ikke endepunkter. En rad som bare inneholder th-celler, hoppes over, mens tomme eller ikke-adressefelt feiler valideringen. Ikke kast første og siste rad etter posisjon: begge kan være et ekte endepunkt etter at sidelayouten endres.

Relaterte artikler