Minden proxy sort egyetlen egységként dolgozzon fel. Ha az oldalon minden megfelelő td-t kilapít, és az eredményeket rögzített szám szerint csoportosítja, előfordulhat, hogy az egyik sorból származó cím a következő sor portjával párosul, amikor egy cella hiányzik vagy másik táblázat jelenik meg.

Az alkalmazás által már megszerzett HTML esetében egy olyan táblázat, amelynek első két oszlopa IP-cím és port, így dolgozható fel:

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))

A html és a table_selector az alkalmazás bemenetei. A szelektort és az oszlopleképezést a forrás tényleges jelöléséből válassza. Az ingyenes proxy lista a végpontrekordok egyik forrása, de a sorait érdemes megvizsgálni, mielőtt ezt a leképezést választja. Sem egy korábbi táblázat-azonosító, sem az az állítás, hogy egy oldal pontosan 300 rekordot tartalmaz, nem tartós séma.

A halmaz eltávolítja a duplikált cím-port párokat, miközben megőrzi az egyes párok kapcsolatát. A váratlan, nulla találatot adó importot azonban így is ki kell vizsgálni: a táblázat megváltozhatott, vagy a lekért dokumentum a lista helyett egy kihívást tartalmazó oldal lehet.

Ha számítanak, tartsa a végpont mellett a közzétett protokollt és az ellenőrzési idő mezőit. Egy hihető IP és port kinyerése csak a formátumot igazolja, nem azt, hogy a végpont jelenleg működő HTTP- vagy SOCKS-szolgáltatást nyújt.

A fejléc- vagy szűrősorok nem végpontok. A csak th cellákat tartalmazó sor kimarad, az üres vagy nem cím jellegű mezők pedig elbuknak az ellenőrzésen. Ne dobja el az első és az utolsó sort pozíció alapján: az oldal elrendezésének változása után bármelyik valódi végpont lehet.

Kapcsolódó cikkek