Extrahovanie proxy IP adries a hexadecimálnych portov z vloženého JSON
Dekódujte známe JSON obsahy z volaní skriptov proxy zoznamov a hexadecimálny port interpretujte len vtedy, keď to formát zdroja uvádza.
Prázdna HTML tabuľka ešte neznamená, že odpoveď neobsahuje žiadne proxy záznamy. Niektoré zoznamy vkladajú JSON objekty do volaní JavaScriptu a riadky doplnia neskôr.
Pre už získaný zdroj, ktorý používa konkrétny obal gp.insertPrx nasledovaný objektom 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 text zdroja, nie objekt prehliadača. Regulárny výraz nájde známy obal; JSONDecoder určí, kde hodnota JSON končí. Tým sa vyhnete pokusu analyzovať vnorený JSON iba regulárnym výrazom.
Pole portu v príklade je výslovne hexadecimálne: C38 znamená desiatkovo 3128. Neaplikujte základ 16 na desiatkové pole iného poskytovateľa len preto, že sa obe volajú port.
Toto je parser pre uvedený formát, nie interpret JavaScriptu. Objektové literály v jednoduchých úvodzovkách, vypočítané hodnoty a ďalšie výrazy JavaScriptu vyžadujú iné zdokumentované dátové rozhranie. Nespúšťajte ľubovoľný kód stránky, aby ste získali zoznam koncových bodov.
Overte kontrakt zdroja a uchovávajte protokolové polia oddelene. Ak má zdroj namiesto toho vyplnené HTML riadky, použite extrakciu koncových bodov po riadkoch namiesto tohto parsera obalov JavaScriptu. Extrakcia adresy a portu nedokazuje, že koncový bod momentálne ponúka použiteľnú proxy službu.