Jadual HTML kosong tidak semestinya bermaksud respons tiada rekod proksi. Sesetengah senarai meletakkan objek JSON di dalam panggilan JavaScript dan mengisi baris kemudian.

Untuk sumber yang telah diperoleh yang menggunakan pembalut khusus gp.insertPrx diikuti objek 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 ialah teks sumber, bukan objek pelayar. Ungkapan nalar menemui pembalut yang dikenali; JSONDecoder menentukan di mana nilai JSON berakhir. Ini mengelakkan percubaan menghurai JSON bersarang dengan ungkapan nalar sahaja.

Medan port dalam contoh adalah heksadesimal secara jelas: C38 bermaksud 3128 perpuluhan. Jangan gunakan asas 16 pada medan perpuluhan pembekal lain hanya kerana kedua-duanya dipanggil port.

Ini penghurai untuk format yang dinyatakan, bukan jurubahasa JavaScript. Literal objek dengan petikan tunggal, nilai terkira dan ungkapan JavaScript lain memerlukan antara muka data terdokumen yang lain. Jangan laksanakan kod halaman sewenang-wenangnya untuk mendapatkan senarai titik akhir.

Sahkan kontrak sumber dan simpan medan protokol secara berasingan. Jika sumber sebaliknya mempunyai baris HTML yang terisi, gunakan pengekstrakan titik akhir mengikut baris dan bukan penghurai pembalut JavaScript ini. Mengekstrak alamat dan port tidak membuktikan titik akhir itu kini menawarkan perkhidmatan proksi yang boleh digunakan.

Artikel berkaitan