Gömülü JSON'dan Proxy IP'leri ve Hex Portları Çıkarma
Proxy listelerinin betik çağrılarındaki bilinen JSON yüklerini çözün ve onaltılık portu yalnızca kaynak biçimi bunu bildirdiğinde yorumlayın.
Boş bir HTML tablosu her zaman yanıtta proxy kaydı olmadığı anlamına gelmez. Bazı listeler JSON nesnelerini JavaScript çağrılarının içine koyar ve satırları daha sonra doldurur.
Daha önce alınmış bir kaynak, belirli gp.insertPrx sarmalayıcısını ve ardından bir JSON nesnesini kullanıyorsa:
import ipaddress
import json
import re
decoder = json.JSONDecoder()
endpoints = set()
for marker in re.finditer(r"gp[.]insertPrx\(\s*", html):
try:
row, end = decoder.raw_decode(html, marker.end())
if not isinstance(row, dict):
continue
address = ipaddress.ip_address(row["PROXY_IP"])
port = int(row["PROXY_PORT"], 16)
except (ValueError, KeyError, TypeError):
continue
if 1 <= port <= 65535 and html[end:].lstrip().startswith(");"):
endpoints.add((str(address), port))
html tarayıcı nesnesi değil, kaynak metnidir. Düzenli ifade bilinen sarmalayıcıyı bulur; JSONDecoder JSON değerinin nerede bittiğini belirler. Böylece iç içe JSON'u yalnızca düzenli ifadeyle ayrıştırma girişiminden kaçınılır.
Örnekteki port alanı açıkça onaltılıktır: C38 ondalık 3128 anlamına gelir. Yalnızca ikisine de port dendiği için başka bir sağlayıcının ondalık alanına 16 tabanını uygulamayın.
Bu, belirtilen biçim için bir ayrıştırıcıdır, JavaScript yorumlayıcısı değildir. Tek tırnaklı nesne değişmezleri, hesaplanan değerler ve diğer JavaScript ifadeleri başka bir belgelenmiş veri arabirimi gerektirir. Uç nokta listesi elde etmek için rastgele sayfa kodu çalıştırmayın.
Kaynak sözleşmesini doğrulayın ve protokol alanlarını ayrı tutun. Kaynakta bunun yerine doldurulmuş HTML satırları varsa, bu JavaScript sarmalayıcı ayrıştırıcısı yerine satır kapsamlı uç nokta çıkarma kullanın. Bir adres ve port çıkarmak, uç noktanın şu anda kullanılabilir bir proxy hizmeti sunduğunu kanıtlamaz.