Phân tích từng hàng proxy như một đơn vị. Nếu làm phẳng mọi td khớp trên trang và nhóm kết quả theo một số lượng cố định, địa chỉ từ hàng này có thể bị ghép với cổng từ hàng kế tiếp khi thiếu một ô hoặc xuất hiện một bảng khác.

Với HTML mà ứng dụng đã lấy được, một bảng có hai cột đầu là địa chỉ IP và cổng có thể được phân tích như sau:

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 và table_selector là đầu vào của ứng dụng. Chọn bộ chọn và ánh xạ cột dựa trên đánh dấu thực tế của nguồn. Danh sách proxy miễn phí là một nguồn bản ghi điểm cuối, nhưng cần xem xét các hàng của nó trước khi chọn ánh xạ đó. Cả ID bảng cũ lẫn tuyên bố rằng một trang chứa đúng 300 bản ghi đều không phải lược đồ lâu bền.

Tập hợp loại bỏ các cặp địa chỉ-và-cổng trùng lặp đồng thời giữ liên kết của từng cặp. Tuy vậy, một lần nhập bất ngờ có kết quả bằng không vẫn nên được điều tra: bảng có thể đã thay đổi hoặc tài liệu tải về có thể là trang thử thách thay vì danh sách.

Giữ mọi giao thức được công bố và các trường thời gian kiểm tra bên cạnh điểm cuối khi chúng quan trọng. Việc trích xuất một IP và cổng trông hợp lý chỉ xác lập định dạng, không phải rằng điểm cuối hiện đang cung cấp dịch vụ HTTP hoặc SOCKS hoạt động được.

Các hàng tiêu đề hoặc bộ lọc không phải điểm cuối. Hàng chỉ chứa ô th bị bỏ qua, còn các trường trống hoặc không phải địa chỉ sẽ không vượt qua kiểm tra. Đừng loại bỏ hàng đầu và hàng cuối theo vị trí: sau khi bố cục trang thay đổi, một trong hai có thể là điểm cuối thực sự.

Bài viết liên quan