Huraikan setiap baris proksi sebagai satu unit. Jika semua td yang sepadan di seluruh halaman diratakan dan hasilnya dikumpulkan mengikut kiraan tetap, alamat daripada satu baris boleh dipasangkan dengan port daripada baris berikutnya apabila sel hilang atau jadual lain muncul.

Untuk HTML yang sudah diperoleh aplikasi, jadual yang dua lajur pertamanya ialah alamat IP dan port boleh dihuraikan seperti berikut:

import ipaddress
from bs4 import BeautifulSoup

soup = BeautifulSoup(html, "html.parser")
table = soup.select_one(table_selector)
if table is None:
    raise ValueError("Expected proxy table was not found")

endpoints = set()
for row in table.select("tbody tr"):
    cells = row.find_all("td", recursive=False)
    if len(cells) < 2:
        continue
    try:
        address = ipaddress.ip_address(cells[0].get_text(strip=True))
        port = int(cells[1].get_text(strip=True))
    except ValueError:
        continue
    if 1 <= port <= 65535:
        endpoints.add((str(address), port))

html dan table_selector ialah input aplikasi. Pilih pemilih dan pemetaan lajur daripada penanda sebenar sumber. Senarai proksi percuma ialah salah satu sumber rekod titik akhir, tetapi barisnya perlu diperiksa sebelum memilih pemetaan itu. Baik ID jadual sejarah mahupun dakwaan bahawa halaman mengandungi tepat 300 rekod bukanlah skema yang kekal.

Set ini membuang pasangan alamat-dan-port yang berganda sambil mengekalkan kaitan setiap pasangan. Namun begitu, import tidak dijangka dengan sifar hasil masih perlu disiasat: jadual mungkin telah berubah atau dokumen yang diambil mungkin halaman cabaran dan bukan senarai.

Simpan protokol yang diumumkan dan medan masa semakan bersama titik akhir apabila ia penting. Mengekstrak IP dan port yang munasabah hanya membuktikan format, bukan bahawa titik akhir itu kini menyediakan perkhidmatan HTTP atau SOCKS yang berfungsi.

Baris pengepala atau penapis bukan titik akhir. Baris yang hanya mengandungi sel th dilangkau, manakala medan kosong atau bukan alamat gagal pengesahan. Jangan buang baris pertama dan terakhir berdasarkan kedudukan: kedua-duanya boleh menjadi titik akhir sebenar selepas susun atur halaman berubah.

Artikel berkaitan