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

Առնչվող հոդվածներ