Kunin ang mga proxy endpoint isang hilera ng talahanayan sa bawat pagkakataon
Panatilihing naka-pares ang mga IP address sa kanilang mga port at i-validate ang mga field kapag pinaparse ang isang naka-save na HTML na talahanayan ng listahan ng proxy.
I-parse ang bawat hilera ng proxy bilang isang yunit. Kung patagin ang lahat ng tumutugmang td sa buong pahina at pangkatin ang mga resulta ayon sa isang takdang bilang, maaaring mapares ang isang address mula sa isang hilera sa isang port mula sa susunod kapag may kulang na cell o may lumitaw na ibang talahanayan.
Para sa HTML na nakuha na ng aplikasyon, ang isang talahanayang ang unang dalawang kolum ay IP address at port ay maaaring i-parse nang ganito:
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))Ang html at table_selector ay mga input ng aplikasyon. Piliin ang selector at ang pagmamapa ng kolum mula sa aktwal na markup ng pinagmulan. Ang libreng listahan ng proxy ay isang pinagmumulan ng mga rekord ng endpoint, ngunit dapat suriin ang mga hilera nito bago piliin ang pagmamapa na iyon. Ni ang makasaysayang table ID ni ang pag-aangkin na ang isang pahina ay naglalaman ng eksaktong 300 rekord ay hindi pangmatagalang schema.
Inaalis ng set ang mga doble na pares ng address-at-port habang pinapanatili ang kaugnayan ng bawat pares. Gayunpaman, ang hindi inaasahang pag-import na may zero na resulta ay dapat pa ring imbestigahan: maaaring nagbago ang talahanayan o ang nakuhang dokumento ay maaaring isang challenge page sa halip na ang listahan.
Panatilihin ang anumang inihayag na protocol at mga field ng oras ng pagsusuri kasama ng endpoint kapag mahalaga ang mga ito. Ang pagkuha ng isang makatwirang IP at port ay nagtatatag ng format, hindi na ang endpoint ay kasalukuyang nagbibigay ng gumaganang HTTP o SOCKS na serbisyo.
Ang mga hilera ng header o filter ay hindi endpoint. Nilalaktawan ang hilera na naglalaman lamang ng mga cell na th, habang ang mga blangkong field o hindi address ay nabibigo sa validation. Huwag itapon ang una at huling hilera batay sa posisyon: alinman sa dalawa ay maaaring tunay na endpoint pagkatapos magbago ang layout ng pahina.