Pridobivanje proxy IP naslovov in šestnajstiških vrat iz vdelanega JSON
Dekodirajte znane vsebine JSON iz klicev skriptov seznamov proxy in šestnajstiška vrata razlagajte le, kadar to navaja oblika vira.
Prazna tabela HTML ne pomeni vedno, da odgovor ne vsebuje proxy zapisov. Nekateri seznami vstavijo objekte JSON v klice JavaScript in vrstice zapolnijo pozneje.
Za že pridobljen vir, ki uporablja poseben ovoj gp.insertPrx, ki mu sledi objekt JSON:
import ipaddress
import json
import re
decoder = json.JSONDecoder()
endpoints = set()
for marker in re.finditer(r"gp[.]insertPrx\(\s*", html):
try:
row, end = decoder.raw_decode(html, marker.end())
if not isinstance(row, dict):
continue
address = ipaddress.ip_address(row["PROXY_IP"])
port = int(row["PROXY_PORT"], 16)
except (ValueError, KeyError, TypeError):
continue
if 1 <= port <= 65535 and html[end:].lstrip().startswith(");"):
endpoints.add((str(address), port))
html je besedilo vira, ne predmet brskalnika. Regularni izraz najde znan ovoj; JSONDecoder določi, kje se vrednost JSON konča. Tako se izognemo poskusu razčlenjevanja gnezdenega JSON samo z regularnim izrazom.
Polje vrat v primeru je izrecno šestnajstiško: C38 pomeni desetiško 3128. Osnove 16 ne uporabite na desetiškem polju drugega ponudnika samo zato, ker se oba imenujeta vrata.
To je razčlenjevalnik za navedeno obliko, ne tolmač JavaScript. Objektni literali v enojnih narekovajih, izračunane vrednosti in drugi izrazi JavaScript zahtevajo drug dokumentiran podatkovni vmesnik. Ne izvajajte poljubne kode strani, da bi dobili seznam končnih točk.
Preverite pogodbo vira in protokolarna polja hranite ločeno. Če ima vir namesto tega izpolnjene vrstice HTML, uporabite pridobivanje končnih točk po vrsticah namesto tega razčlenjevalnika ovojev JavaScript. Pridobitev naslova in vrat ne dokazuje, da končna točka trenutno ponuja uporabno storitev proxy.