Proxy uç noktalarını her seferinde bir tablo satırı olarak çıkarın
IP adreslerini portlarıyla eşleştirilmiş hâlde tutun ve kaydedilmiş bir proxy listesi HTML tablosunu ayrıştırırken alanları doğrulayın.
Her proxy satırını tek bir birim olarak ayrıştırın. Sayfadaki tüm eşleşen td'leri düzleştirip sonuçları sabit bir sayıya göre gruplarsanız, bir hücre eksik olduğunda veya başka bir tablo göründüğünde bir satırdaki adres sonraki satırın portuyla eşleşebilir.
Uygulamanın zaten aldığı HTML için ilk iki sütunu IP adresi ve port olan bir tablo şöyle ayrıştırılabilir:
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 ve table_selector uygulamanın girdileridir. Seçiciyi ve sütun eşlemesini kaynağın gerçek işaretlemesinden seçin. Ücretsiz proxy listesi uç nokta kayıtlarının bir kaynağıdır, ancak bu eşleme seçilmeden önce satırları incelenmelidir. Ne tarihsel bir tablo ID'si ne de bir sayfanın tam olarak 300 kayıt içerdiği iddiası kalıcı bir şema değildir.
Küme, yinelenen adres-ve-port çiftlerini kaldırırken her çiftin ilişkisini korur. Yine de beklenmedik sıfır sonuçlu bir içe aktarma araştırılmalıdır: tablo değişmiş olabilir ya da alınan belge liste yerine bir meydan okuma sayfası olabilir.
Önemli olduğunda, bildirilen protokolü ve denetim zamanı alanlarını uç noktanın yanında tutun. Makul görünen bir IP ve port çıkarmak yalnızca biçimi kanıtlar; uç noktanın şu anda çalışan bir HTTP veya SOCKS hizmeti sunduğunu değil.
Başlık veya filtre satırları uç nokta değildir. Yalnızca th hücreleri içeren satır atlanır; boş veya adres olmayan alanlar doğrulamayı geçemez. İlk ve son satırı konuma göre atmayın: sayfa düzeni değiştikten sonra ikisi de gerçek bir uç nokta olabilir.