દરેક પ્રોક્સી પંક્તિને એક એકમ તરીકે પાર્સ કરો. જો પૃષ્ઠ પરના બધા મેળ ખાતા 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 સેલ ધરાવતી પંક્તિ છોડી દેવામાં આવે છે, જ્યારે ખાલી કે સરનામું ન હોય તેવા ફીલ્ડ ચકાસણીમાં નિષ્ફળ જાય છે. સ્થાનના આધારે પ્રથમ અને છેલ્લી પંક્તિ કાઢી ન નાખો: પૃષ્ઠનું લેઆઉટ બદલાયા પછી બંનેમાંથી કોઈપણ સાચું એન્ડપોઇન્ટ હોઈ શકે.

સંબંધિત લેખો