ખાલી 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 રેપર પાર્સરને બદલે પંક્તિ-આધારિત એન્ડપૉઇન્ટ નિષ્કર્ષણ વાપરો. સરનામું અને પોર્ટ કાઢવાથી સાબિત થતું નથી કે એન્ડપૉઇન્ટ હાલમાં વાપરી શકાય તેવી પ્રોક્સી સેવા આપે છે.

સંબંધિત લેખો