Parse hver proxy-række som en enhed. Hvis du flader alle matchende td ud over siden og grupperer resultaterne efter et fast antal, kan en adresse fra én række blive parret med en port fra den næste, når en celle mangler, eller der dukker en anden tabel op.

For HTML, som applikationen allerede har hentet, kan en tabel, hvis to første kolonner er IP-adresse og port, parses sådan:

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 applikationens input. Vælg selektoren og kolonnetilknytningen ud fra kildens faktiske markup. Gratis proxy-listen er én kilde til endpoint-poster, men dens rækker bør undersøges, før den tilknytning vælges. Hverken et historisk tabel-ID eller påstanden om, at en side indeholder præcis 300 poster, er et varigt skema.

Sættet fjerner dublerede adresse-port-par og bevarer samtidig hvert pars kobling. Et uventet import med nul resultater bør stadig undersøges: tabellen kan være ændret, eller det hentede dokument kan være en udfordringsside i stedet for listen.

Behold eventuelle annoncerede protokol- og kontroltid-felter sammen med endpointet, når de er vigtige. Udtræk af en troværdig IP og port fastslår formatet, ikke at endpointet lige nu leverer en fungerende HTTP- eller SOCKS-tjeneste.

Header- eller filterrækker er ikke endpoints. En række, der kun indeholder th-celler, springes over, mens tomme eller ikke-adressefelter fejler valideringen. Kassér ikke første og sidste række efter position: begge kan være et rigtigt endpoint, efter at sidelayoutet ændrer sig.

Relaterede artikler