प्रत्येक प्रॉक्सी ओळ एकक म्हणून विश्लेषित करा. जर पानावरील सर्व जुळणारे td सपाट करून निकाल ठराविक संख्येने गटबद्ध केले, तर सेल नसल्यास किंवा दुसरे टेबल आल्यास एका ओळीतील पत्ता पुढील ओळीच्या पोर्टशी जोडला जाऊ शकतो.

अ‍ॅप्लिकेशनने आधीच मिळवलेल्या HTML साठी, ज्या टेबलचे पहिले दोन स्तंभ IP पत्ता आणि पोर्ट आहेत, त्याचे असे विश्लेषण करता येते:

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 आणि table_selector अ‍ॅप्लिकेशनचे इनपुट आहेत. स्त्रोताच्या प्रत्यक्ष मार्कअपवरून सिलेक्टर आणि स्तंभ मॅपिंग निवडा. मोफत प्रॉक्सी यादी एंडपॉइंट रेकॉर्डचा एक स्त्रोत आहे, परंतु हे मॅपिंग निवडण्यापूर्वी त्याच्या ओळी तपासल्या पाहिजेत. जुना टेबल ID किंवा पानात नेमके 300 रेकॉर्ड आहेत हा दावा टिकाऊ स्कीमा नाही.

हा संच डुप्लिकेट पत्ता-आणि-पोर्ट जोड्या काढून टाकतो आणि प्रत्येक जोडीचा संबंध टिकवतो. तरीही अनपेक्षित शून्य-निकाल आयात तपासली पाहिजे: टेबल बदलले असू शकते किंवा मिळवलेला दस्तऐवज यादीऐवजी आव्हान पान असू शकतो.

महत्त्वाचे असल्यास, घोषित प्रोटोकॉल आणि तपासणी-वेळ फील्ड एंडपॉइंटसोबत ठेवा. विश्वासार्ह IP आणि पोर्ट काढणे फक्त स्वरूप सिद्ध करते, एंडपॉइंट सध्या कार्यरत HTTP किंवा SOCKS सेवा देतो हे नाही.

हेडर किंवा फिल्टर ओळी एंडपॉइंट नाहीत. फक्त th सेल असलेली ओळ वगळली जाते, तर रिकामी किंवा पत्ता नसलेली फील्ड तपासणीत अपयशी ठरतात. पानाचा लेआउट बदलल्यानंतर पहिली आणि शेवटची ओळ स्थानावरून वगळू नका: दोन्हीपैकी कोणतीही खरा एंडपॉइंट असू शकतो.

संबंधित लेख