Ekstrak endpoint proksi satu baris tabel setiap kali
Jaga alamat IP tetap berpasangan dengan portnya dan validasi kolomnya saat mengurai tabel HTML daftar proksi yang tersimpan.
Urai setiap baris proksi sebagai satu kesatuan. Jika semua td yang cocok di seluruh halaman diratakan lalu hasilnya dikelompokkan dengan jumlah tetap, alamat dari satu baris bisa berpasangan dengan port dari baris berikutnya ketika ada sel yang hilang atau tabel lain muncul.
Untuk HTML yang sudah diperoleh aplikasi, tabel yang dua kolom pertamanya adalah alamat IP dan port dapat diurai sebagai 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 adalah masukan aplikasi. Pilih pemilih dan pemetaan kolom dari markup sumber yang sebenarnya. Daftar proksi gratis adalah salah satu sumber catatan endpoint, tetapi barisnya perlu diperiksa sebelum memilih pemetaan itu. Baik ID tabel historis maupun klaim bahwa sebuah halaman memuat tepat 300 catatan bukanlah skema yang bertahan lama.
Himpunan ini menghapus pasangan alamat-dan-port yang duplikat sekaligus mempertahankan keterkaitan tiap pasangan. Impor tak terduga dengan hasil nol tetap harus diselidiki: tabelnya mungkin sudah berubah atau dokumen yang diambil mungkin halaman tantangan, bukan daftarnya.
Simpan protokol yang diumumkan dan kolom waktu pemeriksaan bersama endpoint bila itu penting. Mengekstrak IP dan port yang masuk akal hanya membuktikan formatnya, bukan bahwa endpoint itu sekarang menyediakan layanan HTTP atau SOCKS yang berfungsi.
Baris header atau filter bukan endpoint. Baris yang hanya berisi sel th dilewati, sedangkan kolom kosong atau bukan alamat gagal validasi. Jangan membuang baris pertama dan terakhir berdasarkan posisi: keduanya bisa merupakan endpoint sungguhan setelah tata letak halaman berubah.