Здабывайце канчатковыя пункты проксі па адным радку табліцы
Трымайце IP-адрасы разам з іх партамі і правярайце палі пры разборы захаванай HTML-табліцы спісу проксі.
Разбірайце кожны радок проксі як асобную адзінку. Калі сплюшчыць усе адпаведныя 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 прапускаецца, а пустыя або неадрасныя палі не праходзяць праверку. Не адкідвайце першы і апошні радок па пазіцыі: любы з іх можа быць сапраўдным канчатковым пунктам пасля змены разметкі старонкі.