Празна HTML табела не значи увек да одговор не садржи прокси записе. Неке листе стављају JSON објекте унутар JavaScript позива и попуњавају редове касније.

За већ добијен извор који користи посебан омотач 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 омотача. Издвајање адресе и порта не доказује да крајња тачка тренутно нуди употребљиву прокси услугу.

Повезани чланци