Wyodrębniaj punkty końcowe proxy wiersz tabeli po wierszu
Trzymaj adresy IP sparowane z ich portami i sprawdzaj pola podczas analizy zapisanej tabeli HTML z listą proxy.
Analizuj każdy wiersz proxy jako jedną całość. Jeśli spłaszczysz wszystkie pasujące td na stronie i pogrupujesz wyniki według stałej liczby, adres z jednego wiersza może zostać sparowany z portem z następnego, gdy brakuje komórki lub pojawia się inna tabela.
W przypadku HTML, który aplikacja już pobrała, tabelę, której pierwsze dwie kolumny to adres IP i port, można przeanalizować tak:
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 i table_selector to dane wejściowe aplikacji. Wybierz selektor i mapowanie kolumn na podstawie rzeczywistego znacznika źródła. Darmowa lista proxy jest jednym ze źródeł rekordów punktów końcowych, ale jej wiersze należy obejrzeć przed wybraniem tego mapowania. Ani historyczny identyfikator tabeli, ani twierdzenie, że strona zawiera dokładnie 300 rekordów, nie są trwałym schematem.
Zbiór usuwa zduplikowane pary adres-port, zachowując powiązanie każdej pary. Nieoczekiwany import z zerowym wynikiem nadal warto zbadać: tabela mogła się zmienić albo pobrany dokument może być stroną wyzwania, a nie listą.
Zachowaj zapowiedziany protokół i pola czasu sprawdzenia obok punktu końcowego, gdy mają znaczenie. Wyodrębnienie wiarygodnego IP i portu ustala format, a nie to, że punkt końcowy obecnie udostępnia działającą usługę HTTP lub SOCKS.
Wiersze nagłówka lub filtra nie są punktami końcowymi. Wiersz zawierający tylko komórki th jest pomijany, a puste lub niebędące adresami pola nie przechodzą walidacji. Nie odrzucaj pierwszego i ostatniego wiersza ze względu na pozycję: po zmianie układu strony każdy z nich może być prawdziwym punktem końcowym.