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

सम्बन्धित लेखहरू