Eng eidel HTML-Tabell heescht net ëmmer, datt d'Äntwert keng Proxy-Andräg enthält. Verschidde Lëschten setzen JSON-Objeten an JavaScript-Opruff a fëllen d'Reien duerno.

Fir eng Quell, déi schonn erofgeluede gouf an de spezifeschen Wrapper gp.insertPrx benotzt, gefollegt vun engem JSON-Objet:

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 ass den Text vun der Quell, keen Browserobjekt. Den regulären Ausdrock fënnt e bekannte Wrapper; JSONDecoder bestëmmt, wou de JSON-Wäert ophält. Sou gëtt et vermeit, agebett JSON just mat engem regulären Ausdrock ze parsen.

D'Portfeld am Beispill ass ausdrécklech hexadecimal: C38 bedeit dezimal 3128. Benotzt d'Basis 16 net op engem anere Fournisseur säin Dezimalfeld, just well béid Port genannt ginn.

Dëst ass e Parser fir de genannte Format, keen JavaScript-Interpret. Objektliterale mat einfachen Anführungszeechen, berechtegt Wäerter an aner JavaScript-Ausdréck brauchen eng aner dokumentéiert Datenschnittstell. Féiert keen arbiträre Säitecode aus, fir eng Endpunktlëscht ze kréien.

Validdéiert de Quellkontrakt a haalt d'Protokollfelder getrennt. Wann d'Quell amplaz gefëllt HTML-Reien huet, benotzt Endpunkt-Extraktioun pro Reih anstatt dësen JavaScript-Wrapper-Parser. Eng Adress an e Port erauszesichen beweist net, datt den Endpunkt am Moment e brauchbare Proxy-Service ubitt.

Ähnlech Artikelen