Парсирајте го секој ред на прокси како една единица. Ако ги израмните сите соодветни td низ страницата и ги групирате резултатите по фиксен број, адреса од еден ред може да се спари со порта од следниот кога недостасува ќелија или се појавува друга табела.

За HTML што апликацијата веќе го добила, табела чиишто први две колони се IP-адреса и порта може да се парсира вака:

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 и table_selector се влезови на апликацијата. Изберете го селекторот и мапирањето на колоните според вистинската ознака на изворот. Бесплатната листа на прокси е еден извор на записи за крајни точки, но нејзините редови треба да се прегледаат пред да се избере тоа мапирање. Ниту историски ID на табела, ниту тврдењето дека страницата содржи точно 300 записи не се трајна шема.

Множеството ги отстранува дупликатите парови адреса-и-порта додека ја задржува поврзаноста на секој пар. Сепак, неочекуван увоз со нула резултати треба да се истражи: табелата можеби се променила или добиениот документ може да е страница за проверка наместо листата.

Кога се важни, задржете го објавениот протокол и полињата за време на проверка покрај крајната точка. Извлекувањето веродостојна IP и порта го потврдува само форматот, а не дека крајната точка во моментов обезбедува работна HTTP или SOCKS услуга.

Редовите на заглавието или филтерот не се крајни точки. Редот што содржи само th ќелии се прескокнува, додека празните или не-адресни полиња не поминуваат валидација. Не ги отфрлајте првиот и последниот ред по позиција: кој било од нив може да биде вистинска крајна точка откако ќе се промени распоредот на страницата.

Поврзани статии