ਪ੍ਰੌਕਸੀ ਐਂਡਪੁਆਇੰਟ ਇੱਕ ਵਾਰ ਵਿੱਚ ਇੱਕ ਟੇਬਲ ਕਤਾਰ
IP ਪਤਿਆਂ ਨੂੰ ਉਹਨਾਂ ਦੇ ਪੋਰਟਾਂ ਨਾਲ ਜੋੜੀ ਰੱਖੋ ਅਤੇ ਸੰਭਾਲੀ ਹੋਈ ਪ੍ਰੌਕਸੀ ਸੂਚੀ ਦੀ HTML ਟੇਬਲ ਪਾਰਸ ਕਰਦੇ ਸਮੇਂ ਖੇਤਰ ਜਾਂਚੋ।
ਹਰ ਪ੍ਰੌਕਸੀ ਕਤਾਰ ਨੂੰ ਇੱਕ ਇਕਾਈ ਵਜੋਂ ਪਾਰਸ ਕਰੋ। ਜੇ ਸਫ਼ੇ ਦੇ ਸਾਰੇ ਮਿਲਦੇ 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 ਸੈੱਲ ਵਾਲੀ ਕਤਾਰ ਛੱਡ ਦਿੱਤੀ ਜਾਂਦੀ ਹੈ, ਜਦਕਿ ਖਾਲੀ ਜਾਂ ਪਤਾ ਨਾ ਹੋਣ ਵਾਲੇ ਖੇਤਰ ਜਾਂਚ ਵਿੱਚ ਫੇਲ੍ਹ ਹੁੰਦੇ ਹਨ। ਪਹਿਲੀ ਅਤੇ ਆਖਰੀ ਕਤਾਰ ਨੂੰ ਸਥਿਤੀ ਦੇ ਆਧਾਰ 'ਤੇ ਨਾ ਸੁੱਟੋ: ਸਫ਼ੇ ਦਾ ਲੇਆਉਟ ਬਦਲਣ ਤੋਂ ਬਾਅਦ ਦੋਵਾਂ ਵਿੱਚੋਂ ਕੋਈ ਵੀ ਅਸਲ ਐਂਡਪੁਆਇੰਟ ਹੋ ਸਕਦਾ ਹੈ।