Արտահանեք պրոքսի վերջնակետերը մեկ աղյուսակի տողով
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 բջիջներ պարունակող տողը բաց է թողնվում, իսկ դատարկ կամ ոչ հասցե դաշտերը չեն անցնում ստուգումը։ Մի՛ հեռացրեք առաջին և վերջին տողերը՝ ըստ դիրքի․ էջի դասավորությունը փոխվելուց հետո դրանցից ցանկացածը կարող է իրական վերջնակետ լինել։