Extreu els punts finals de proxy una fila de la taula alhora
Mantingueu les adreces IP aparellades amb els seus ports i valideu els camps quan analitzeu una taula HTML de llista de proxies desada.
Analitzeu cada fila de proxy com una unitat. Si aplanau tots els td coincidents de la pàgina i agrupau els resultats per un recompte fix, una adreça d'una fila es pot aparellar amb un port de la següent quan falta una cel·la o apareix una altra taula.
Per a l'HTML que l'aplicació ja ha obtingut, una taula les dues primeres columnes de la qual són adreça IP i port es pot analitzar així:
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 són entrades de l'aplicació. Trieu el selector i el mapatge de columnes a partir del marcatge real de la font. La llista de proxies gratuïts és una font de registres de punts finals, però cal inspeccionar-ne les files abans de triar aquest mapatge. Ni un ID de taula històric ni l'afirmació que una pàgina conté exactament 300 registres no són un esquema durador.
El conjunt elimina les parelles adreça-port duplicades i conserva l'associació de cada parella. Una importació inesperada amb zero resultats encara s'ha d'investigar: la taula pot haver canviat o el document obtingut pot ser una pàgina de desafiament en lloc del llistat.
Conserveu qualsevol protocol anunciat i els camps d'hora de comprovació al costat del punt final quan importin. Extreure una IP i un port plausibles estableix el format, no que el punt final ofereixi ara un servei HTTP o SOCKS funcional.
Les files de capçalera o de filtre no són punts finals. Una fila que només conté cel·les th se salta, mentre que els camps buits o que no són adreces fallen la validació. No descarteu la primera i l'última fila per posició: qualsevol de les dues pot ser un punt final real després que canviï el disseny de la pàgina.