ແຍກແຕ່ລະແຖວພຣັອກຊີເປັນໜ່ວຍດຽວ. ຖ້າທ່ານປຽບ 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 ເປັນຂໍ້ມູນເຂົ້າຂອງແອັບພລິເຄຊັນ. ເລືອກຕົວເລືອກ ແລະ ການຈັບຄູ່ຖັນຈາກເຄື່ອງໝາຍຕົວຈິງຂອງແຫຼ່ງ. ລາຍຊື່ພຣັອກຊີຟຣີ ເປັນແຫຼ່ງໜຶ່ງຂອງບັນທຶກຈຸດປາຍທາງ, ແຕ່ຄວນກວດເບິ່ງແຖວຂອງມັນກ່ອນເລືອກການຈັບຄູ່ນັ້ນ. ທັງໄອດີຕາຕະລາງແບບເກົ່າ ແລະ ຄຳກ່າວວ່າໜ້າໜຶ່ງມີ 300 ບັນທຶກພໍດີ ບໍ່ແມ່ນໂຄງຮ່າງທີ່ຍືນຍົງ.

ຊຸດນີ້ລຶບຄູ່ທີ່ຢູ່-ແລະ-ພອດທີ່ຊ້ຳກັນ ໃນຂະນະທີ່ຮັກສາຄວາມສຳພັນຂອງແຕ່ລະຄູ່. ເຖິງຢ່າງໃດກໍ່ຕາມ ການນຳເຂົ້າທີ່ບໍ່ຄາດຄິດພ້ອມຜົນລັບສູນຍັງຄວນຖືກສືບສວນ: ຕາຕະລາງອາດປ່ຽນໄປ ຫຼື ເອກະສານທີ່ດຶງມາອາດເປັນໜ້າທ້າທາຍແທນລາຍຊື່.

ເກັບໂປຣໂຕຄໍທີ່ປະກາດ ແລະ ຟິລດ໌ເວລາກວດສອບໄວ້ຄຽງກັບຈຸດປາຍທາງເມື່ອມັນສຳຄັນ. ການດຶງ IP ແລະ ພອດທີ່ເບິ່ງສົມເຫດສົມຜົນພຽງແຕ່ຢືນຢັນຮູບແບບ ບໍ່ແມ່ນວ່າຈຸດປາຍທາງນັ້ນໃຫ້ບໍລິການ HTTP ຫຼື SOCKS ທີ່ໃຊ້ໄດ້ໃນຕອນນີ້.

ແຖວຫົວຕາຕະລາງ ຫຼື ແຖວກັ່ນຕອງບໍ່ແມ່ນຈຸດປາຍທາງ. ແຖວທີ່ມີແຕ່ຊ່ອງ th ຈະຖືກຂ້າມໄປ, ສ່ວນຊ່ອງຫວ່າງ ຫຼື ບໍ່ແມ່ນທີ່ຢູ່ຈະຕົກການກວດສອບ. ຢ່າຖິ້ມແຖວທຳອິດ ແລະ ແຖວສຸດທ້າຍຕາມຕຳແໜ່ງ: ທັງສອງອາດເປັນຈຸດປາຍທາງແທ້ຫຼັງຈາກຮູບແບບໜ້າປ່ຽນໄປ.

ບົດຄວາມທີ່ກ່ຽວຂ້ອງ