Parse elke proxyrij als één eenheid. Als je alle overeenkomende td over de pagina plat slaat en de resultaten groepeert op een vast aantal, kan een adres uit de ene rij aan een poort uit de volgende worden gekoppeld wanneer een cel ontbreekt of er een andere tabel verschijnt.

Voor HTML die de applicatie al heeft opgehaald, kan een tabel waarvan de eerste twee kolommen IP-adres en poort zijn als volgt worden geparsed:

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 en table_selector zijn invoer van de applicatie. Kies de selector en de kolomtoewijzing op basis van de werkelijke markup van de bron. De gratis proxylijst is één bron van eindpuntrecords, maar de rijen moeten worden bekeken voordat die toewijzing wordt gekozen. Noch een historisch tabel-ID noch de bewering dat een pagina precies 300 records bevat is een blijvend schema.

De set verwijdert dubbele adres-en-poortparen terwijl de koppeling van elk paar behouden blijft. Een onverwachte import met nul resultaten moet toch worden onderzocht: de tabel kan zijn veranderd of het opgehaalde document kan een uitdagingspagina zijn in plaats van de lijst.

Bewaar een aangekondigd protocol en velden voor controletijd naast het eindpunt wanneer ze ertoe doen. Het extraheren van een aannemelijk IP en een poort stelt alleen het formaat vast, niet dat het eindpunt op dit moment een werkende HTTP- of SOCKS-dienst levert.

Kop- of filterrijen zijn geen eindpunten. Een rij met alleen th-cellen wordt overgeslagen, terwijl lege of niet-adresvelden de validatie niet halen. Gooi de eerste en laatste rij niet weg op basis van positie: beide kunnen een echt eindpunt zijn nadat de pagina-indeling verandert.

Gerelateerde artikelen