हर प्रॉक्सी पंक्ति को एक इकाई मानकर विश्लेषण करें। यदि पूरे पेज के सभी मेल खाते 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 सेल वाली पंक्ति छोड़ दी जाती है, जबकि खाली या पता न होने वाले फ़ील्ड सत्यापन में विफल होते हैं। पहली और आखिरी पंक्ति को स्थान के आधार पर न हटाएँ: पेज लेआउट बदलने के बाद दोनों में से कोई भी असली एंडपॉइंट हो सकता है।

संबंधित लेख