Proxy végpontok kinyerése egyszerre egy táblázatsorral
Tartsa az IP-címeket a portjaikkal párosítva, és ellenőrizze a mezőket egy mentett proxy lista HTML-táblázatának feldolgozásakor.
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.