ఖాళీ HTML పట్టిక అంటే ప్రతిస్పందనలో ప్రాక్సీ రికార్డ్‌లు లేవని ఎప్పుడూ కాదు. కొన్ని జాబితాలు JavaScript కాల్‌ల లోపల JSON వస్తువులను ఉంచి తర్వాత వరుసలను నింపుతాయి.

ఇప్పటికే పొందిన మూలం నిర్దిష్ట ర్యాపర్ gp.insertPrx మరియు దాని తర్వాత 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 అనేది మూల పాఠ్యం, బ్రౌజర్ వస్తువు కాదు. సాధారణ వ్యక్తీకరణ తెలిసిన ర్యాపర్‌ను కనుగొంటుంది; JSONDecoder JSON విలువ ఎక్కడ ముగుస్తుందో నిర్ణయిస్తుంది. ఇది నెస్టెడ్ JSONను సాధారణ వ్యక్తీకరణతో మాత్రమే పార్స్ చేయాలనే ప్రయత్నాన్ని నివారిస్తుంది.

ఉదాహరణలోని పోర్ట్ ఫీల్డ్ స్పష్టంగా హెక్సాడెసిమల్: C38 అంటే దశాంశ 3128. రెండింటినీ పోర్ట్ అని పిలుస్తారు కాబట్టి మాత్రమే మరో ప్రదాత యొక్క దశాంశ ఫీల్డ్‌పై ఆధారం 16ను వర్తింపజేయకండి.

ఇది పేర్కొన్న ఆకృతి కోసం పార్సర్, JavaScript ఇంటర్‌ప్రెటర్ కాదు. ఒకే కోట్ వస్తువు లిటరల్‌లు, లెక్కించిన విలువలు మరియు ఇతర JavaScript వ్యక్తీకరణలకు మరో డాక్యుమెంటెడ్ డేటా ఇంటర్‌ఫేస్ అవసరం. ఎండ్‌పాయింట్ జాబితా పొందడానికి ఏకపక్ష పేజీ కోడ్‌ను అమలు చేయకండి.

మూల ఒప్పందాన్ని ధృవీకరించి ప్రోటోకాల్ ఫీల్డ్‌లను విడిగా ఉంచండి. మూలంలో బదులుగా నింపిన HTML వరుసలు ఉంటే, ఈ JavaScript ర్యాపర్ పార్సర్‌కు బదులుగా వరుస-ఆధారిత ఎండ్‌పాయింట్ సంగ్రహణ ఉపయోగించండి. చిరునామా మరియు పోర్ట్‌ను సంగ్రహించడం ఎండ్‌పాయింట్ ప్రస్తుతం ఉపయోగించదగిన ప్రాక్సీ సేవను అందిస్తోందని నిరూపించదు.

సంబంధిత వ్యాసాలు