Analiza cada fila de proxy como unha unidade. Se aplanas cada td coincidente da páxina e agrupas os resultados por un reconto fixo, unha dirección dunha fila pode emparellarse cun porto da seguinte cando falta unha cela ou aparece outra táboa.

Para o HTML que a aplicación xa obtivo, unha táboa cuxas dúas primeiras columnas son dirección IP e porto pódese analizar así:

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 e table_selector son entradas da aplicación. Escolle o selector e a asignación de columnas a partir do marcado real da fonte. A lista de proxies gratuítos é unha fonte de rexistros de extremos, pero convén inspeccionar as súas filas antes de escoller esa asignación. Nin un ID de táboa histórico nin a afirmación de que unha páxina contén exactamente 300 rexistros son un esquema duradeiro.

O conxunto elimina os pares dirección-porto duplicados e conserva a asociación de cada par. Aínda así, unha importación inesperada con cero resultados debe investigarse: a táboa pode ter cambiado ou o documento obtido pode ser unha páxina de desafío en lugar da listaxe.

Conserva calquera protocolo anunciado e os campos de hora de comprobación xunto ao extremo cando importen. Extraer unha IP e un porto plausibles establece o formato, non que o extremo ofreza agora un servizo HTTP ou SOCKS funcional.

As filas de cabeceira ou de filtro non son extremos. Unha fila que só contén celas th omítese, mentres que os campos baleiros ou que non son direccións fallan a validación. Non descartes a primeira e a última fila por posición: calquera das dúas pode ser un extremo real despois de cambiar o deseño da páxina.

Artigos relacionados