ញែកជួរប្រូកស៊ីនីមួយៗជាឯកតាមួយ។ ប្រសិនបើអ្នកធ្វើឱ្យ 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 ត្រូវបានរំលង រីឯវាលទទេ ឬមិនមែនអាសយដ្ឋាន នឹងបរាជ័យក្នុងការផ្ទៀងផ្ទាត់។ កុំបោះបង់ជួរទីមួយ និងជួរចុងក្រោយតាមទីតាំង៖ ទាំងពីរអាចជាចំណុចបញ្ចប់ពិតប្រាកដ បន្ទាប់ពីប្លង់ទំព័រផ្លាស់ប្តូរ។

អត្ថបទពាក់ព័ន្ធ