Az üres HTML-táblázat nem mindig jelenti azt, hogy a válasz nem tartalmaz proxy rekordokat. Egyes listák JSON-objektumokat tesznek JavaScript-hívásokba, és később töltik fel a sorokat.

Egy már beszerzett forrásnál, amely a gp.insertPrx nevű burkolót használja, majd egy JSON-objektum következik:

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))

a html a forrás szövege, nem böngészőobjektum. A reguláris kifejezés megtalál egy ismert burkolót; a JSONDecoder meghatározza, hol végződik a JSON-értéke. Így elkerülhető a beágyazott JSON pusztán reguláris kifejezéssel való elemzésének kísérlete.

A példa portmezője kifejezetten hexadecimális: a C38 tízes számrendszerben 3128-at jelent. Ne alkalmazza a 16-os alapot egy másik szolgáltató tízes mezőjére csak azért, mert mindkettőt portnak nevezik.

Ez az adott formátum elemzője, nem JavaScript-értelmező. Az egyszeres idézőjelű objektumliterálok, a számított értékek és más JavaScript-kifejezések más, dokumentált adatinterfészt igényelnek. Ne futtasson tetszőleges oldalkódot végpontlista megszerzéséhez.

Ellenőrizze a forrás szerződését, és tartsa külön a protokollmezőket. Ha a forrásban inkább kitöltött HTML-sorok vannak, használjon soronkénti végpontkinyerést a JavaScript-burkoló elemző helyett. Egy cím és port kinyerése nem bizonyítja, hogy a végpont jelenleg használható proxy szolgáltatást kínál.

Kapcsolódó cikkek