Издвајање прокси IP адреса и хексадецималних портова из уграђеног JSON-а
Декодирајте познате JSON садржаје из позива скрипти прокси листа и тумачите хексадецимални порт само када формат извора то наводи.
Празна 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 омотача. Издвајање адресе и порта не доказује да крајња тачка тренутно нуди употребљиву прокси услугу.