Jedwali tupu la HTML haimaanishi kila wakati kuwa jibu halina rekodi za proksi. Baadhi ya orodha huweka vitu vya JSON ndani ya miito ya JavaScript na kujaza safu baadaye.

Kwa chanzo kilichopatikana tayari kinachotumia kifungo maalum gp.insertPrx kikifuatiwa na kitu cha 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 ni maandishi ya chanzo, si kitu cha kivinjari. Usemi wa kawaida hupata kifungo kinachojulikana; JSONDecoder huamua thamani ya JSON inapoishia. Hii inaepuka jaribio la kuchanganua JSON iliyopangwa ndani kwa usemi wa kawaida pekee.

Sehemu ya bandari katika mfano ni hexadecimals waziwazi: C38 inamaanisha 3128 ya desimali. Usitumie msingi 16 kwenye sehemu ya desimali ya mtoa huduma mwingine kwa sababu tu zote zinaitwa bandari.

Hiki ni kichanganuzi cha muundo uliotajwa, si mkalimani wa JavaScript. Maandishi ya vitu yenye alama moja ya nukuu, thamani zilizohesabiwa na misemo mingine ya JavaScript huhitaji kiolesura kingine cha data kilichoandikwa. Usitekeleze msimbo wa ukurasa holela ili kupata orodha ya vituo.

Thibitisha mkataba wa chanzo na uweke sehemu za itifaki kando. Ikiwa chanzo kina safu za HTML zilizojazwa badala yake, tumia uchimbaji wa vituo kwa safu badala ya kichanganuzi hiki cha kifungo cha JavaScript. Kutoa anwani na bandari hakuthibitishi kuwa kituo kinatoa huduma ya proksi inayoweza kutumika kwa sasa.

Makala zinazohusiana