Jede Proxy-Zeile als Einheit parsen. Werden alle passenden td einer Seite flachgezogen und die Ergebnisse nach einer festen Anzahl gruppiert, kann eine Adresse aus einer Zeile mit einem Port aus der nächsten gepaart werden, wenn eine Zelle fehlt oder eine weitere Tabelle erscheint.

Für HTML, das die Anwendung bereits bezogen hat, lässt sich eine Tabelle, deren erste zwei Spalten IP-Adresse und Port sind, so parsen:

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 und table_selector sind Eingaben der Anwendung. Selektor und Spaltenzuordnung nach dem tatsächlichen Markup der Quelle wählen. Die kostenlose Proxy-Liste ist eine Quelle für Endpunkt-Datensätze, doch ihre Zeilen sollten geprüft werden, bevor diese Zuordnung gewählt wird. Weder eine historische Tabellen-ID noch die Behauptung, eine Seite enthalte genau 300 Datensätze, ist ein dauerhaftes Schema.

Die Menge entfernt doppelte Adress-Port-Paare und erhält die Zuordnung jedes Paares. Ein unerwarteter Import mit null Ergebnissen sollte dennoch untersucht werden: Die Tabelle kann sich geändert haben, oder das abgerufene Dokument ist eine Challenge-Seite statt der Liste.

Angegebenes Protokoll und Prüfzeit-Felder beim Endpunkt belassen, wenn sie wichtig sind. Eine plausible IP und einen Port zu extrahieren belegt nur das Format, nicht dass der Endpunkt derzeit einen funktionierenden HTTP- oder SOCKS-Dienst bietet.

Kopf- oder Filterzeilen sind keine Endpunkte. Eine Zeile nur mit th-Zellen wird übersprungen, leere oder nicht als Adresse erkennbare Felder scheitern an der Prüfung. Erste und letzte Zeile nicht nach Position verwerfen: Beide können nach einer Layoutänderung ein echter Endpunkt sein.

Ähnliche Artikel