ഓരോ പ്രോക്സി വരിയും ഒരു യൂണിറ്റായി പാഴ്സ് ചെയ്യുക. പേജിലുടനീളമുള്ള എല്ലാ പൊരുത്തപ്പെടുന്ന 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 സെല്ലുകൾ മാത്രമുള്ള വരി ഒഴിവാക്കപ്പെടുന്നു, ശൂന്യമോ വിലാസമല്ലാത്തതോ ആയ ഫീൽഡുകൾ സാധൂകരണത്തിൽ പരാജയപ്പെടും. പേജ് ലേഔട്ട് മാറിയതിന് ശേഷം ആദ്യ വരിയും അവസാന വരിയും സ്ഥാനം നോക്കി ഒഴിവാക്കരുത്: രണ്ടും യഥാർത്ഥ എൻഡ്പോയിന്റ് ആകാം.

അനുബന്ധ ലേഖനങ്ങൾ