Ištraukite tarpinio serverio galinius taškus po vieną lentelės eilutę
Laikykite IP adresus susietus su jų prievadais ir tikrinkite laukus analizuodami išsaugotą tarpinių serverių sąrašo HTML lentelę.
Analizuokite kiekvieną tarpinio serverio eilutę kaip vieną vienetą. Jei suplokštinsite visus atitinkančius td visame puslapyje ir sugrupuosite rezultatus pagal fiksuotą skaičių, vienos eilutės adresas gali būti suporuotas su kitos eilutės prievadu, kai trūksta langelio arba atsiranda kita lentelė.
Jei programėlė jau gavo HTML, lentelę, kurios pirmi du stulpeliai yra IP adresas ir prievadas, galima analizuoti taip:
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 ir table_selector yra programėlės įvestys. Pasirinkite selektorių ir stulpelių susiejimą pagal tikrąjį šaltinio žymėjimą. Nemokamas tarpinių serverių sąrašas yra vienas galinių taškų įrašų šaltinis, tačiau prieš pasirenkant šį susiejimą jo eilutes reikėtų apžiūrėti. Nei istorinis lentelės ID, nei teiginys, kad puslapyje yra lygiai 300 įrašų, nėra ilgalaikė schema.
Rinkinys pašalina pasikartojančias adreso ir prievado poras, išsaugodamas kiekvienos poros ryšį. Vis dėlto netikėtą importą su nuliniu rezultatu reikėtų ištirti: lentelė galėjo pasikeisti arba gautas dokumentas gali būti iššūkio puslapis, o ne sąrašas.
Kai tai svarbu, prie galinio taško laikykite nurodytą protokolą ir patikrinimo laiko laukus. Patikimo IP ir prievado ištraukimas patvirtina tik formatą, o ne tai, kad galinis taškas šiuo metu teikia veikiančią HTTP ar SOCKS paslaugą.
Antraštės ar filtro eilutės nėra galiniai taškai. Eilutė, kurioje yra tik th langeliai, praleidžiama, o tušti ar ne adreso laukai nepraeina tikrinimo. Neatmeskite pirmos ir paskutinės eilutės pagal padėtį: bet kuri jų gali būti tikras galinis taškas po to, kai pasikeičia puslapio išdėstymas.