Extrahera proxy-slutpunkter en tabellrad i taget
Håll IP-adresser parade med sina portar och validera fälten när du tolkar en sparad HTML-tabell med proxylistor.
Tolka varje proxyrad som en enhet. Om du plattar ut alla matchande td över sidan och grupperar resultaten efter ett fast antal kan en adress från en rad paras ihop med en port från nästa när en cell saknas eller en annan tabell dyker upp.
För HTML som applikationen redan har hämtat kan en tabell vars två första kolumner är IP-adress och port tolkas så här:
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 och table_selector är indata till applikationen. Välj selektor och kolumnmappning utifrån källans faktiska markup. Gratis proxylista är en källa till slutpunktsposter, men dess rader bör granskas innan den mappningen väljs. Varken ett historiskt tabell-ID eller påståendet att en sida innehåller exakt 300 poster är ett hållbart schema.
Mängden tar bort dubblerade adress-och-port-par samtidigt som kopplingen i varje par bevaras. En oväntad import med noll resultat bör ändå undersökas: tabellen kan ha ändrats eller det hämtade dokumentet kan vara en utmaningssida i stället för listan.
Behåll eventuella annonserade protokoll- och kontrolltidsfält tillsammans med slutpunkten när de spelar roll. Att extrahera en trovärdig IP och port fastställer formatet, inte att slutpunkten för närvarande tillhandahåller en fungerande HTTP- eller SOCKS-tjänst.
Huvud- eller filterrader är inte slutpunkter. En rad som bara innehåller th-celler hoppas över, medan tomma eller icke-adressfält misslyckas i valideringen. Kasta inte bort första och sista raden efter position: båda kan vara en riktig slutpunkt efter att sidlayouten ändras.