Bỏ qua, tới nội dung chính
Esc

Proxy cho thu thập dữ liệu web — chọn loại nào, xoay IP ra sao và làm đúng luật chơi

Theo nhu cầu 4 phút đọc

Trong bài này
  1. 01 Trước hết: bạn có cần proxy không?
  2. 02 Chọn loại proxy cho từng nhu cầu
  3. 03 Xoay IP thế nào cho hợp lý
  4. 04 Giới hạn tốc độ và thử lại
  5. 05 Làm đúng luật chơi
  6. 06 Ví dụ: Python với proxy và giới hạn tốc độ
  7. 07 Proxy 4G Singapore của 65Proxy có hợp không?
  8. 08 Câu hỏi thường gặp

Thu thập dữ liệu web (web scraping) là dùng chương trình để đọc dữ liệu công khai trên các trang web: giá sản phẩm, danh sách tin đăng, kết quả tìm kiếm. Khi số lượng yêu cầu tăng lên, website bắt đầu giới hạn hoặc chặn IP của bạn — đó là lúc người ta nghĩ đến proxy. Nhưng proxy không phải lúc nào cũng cần, và chọn sai loại thì tốn tiền mà vẫn bị chặn. Bài này giúp bạn quyết định có cần proxy không, chọn loại nào, xoay IP thế nào, và thu thập dữ liệu một cách có trách nhiệm.

Trước hết: bạn có cần proxy không?

Nhiều trường hợp không cần:

  • Website có API hoặc dữ liệu mở: dùng API chính thức luôn ổn định và hợp lệ hơn đọc HTML.
  • Lượng yêu cầu nhỏ: vài trăm trang mỗi ngày với tốc độ chậm rãi thường chạy tốt từ IP của bạn.
  • Có nguồn khác: RSS, sitemap, dữ liệu xuất sẵn.

Proxy cần thiết khi bạn cần dữ liệu theo quốc gia (giá, kết quả tìm kiếm ở Singapore), hoặc khi khối lượng hợp lý của bạn vẫn vượt mức một IP được phép.

Chọn loại proxy cho từng nhu cầu

Nhu cầu Loại proxy phù hợp Lý do
Khối lượng lớn, website không chặn IP máy chủ Datacenter Rẻ, nhanh, nhiều IP
Nhiều trang, nhiều quốc gia, cần IP đa dạng Dân cư xoay theo request Kho IP rất lớn
Dữ liệu ở Singapore, trang soi kỹ IP, khối lượng vừa phải 4G mobile IP được tin cậy, đúng mạng di động

Proxy 4G mạnh ở độ tin cậy, không phải ở số lượng: tại mỗi thời điểm một proxy là một IP. So sánh đầy đủ ba loại có trong bài proxy 4G, dân cư và datacenter.

Xoay IP thế nào cho hợp lý

  • Không xoay vô cớ: đổi IP sau mỗi request không làm bạn "vô hình", chỉ làm phiên làm việc rời rạc.
  • Xoay khi bị giới hạn: khi website bắt đầu trả lỗi 429 hay captcha, giảm tốc độ trước, rồi mới đổi IP.
  • Giữ cookie khớp với IP: một phiên (cookie) nên đi cùng một IP; đổi IP thì bắt đầu phiên mới.
  • Với proxy 4G của 65Proxy: đổi IP bằng link riêng của từng proxy, tối đa một lần mỗi 5 phút. Cách gọi link và chờ IP mới bằng code có trong bài đổi IP proxy bằng API.

Giới hạn tốc độ và thử lại

Thu thập dữ liệu bền vững dựa vào tốc độ hợp lý hơn là số lượng IP:

  • Nghỉ giữa các request (vài giây, có chút ngẫu nhiên) và giới hạn số kết nối song song.
  • Tôn trọng Retry-After khi website trả 429 hoặc 503; nếu không có, đợi lâu dần (5, 10, 20 giây…).
  • Lưu đệm (cache): đừng tải lại trang chưa thay đổi; dùng header If-Modified-Since / ETag nếu website hỗ trợ.
  • Chạy vào giờ thấp điểm của website nếu có thể.

Làm đúng luật chơi

  • Đọc điều khoản sử dụng của website và tệp robots.txt; tôn trọng những phần họ không cho phép.
  • Chỉ thu thập dữ liệu công khai: không đăng nhập để lấy dữ liệu sau tường đăng nhập, không vượt captcha.
  • Cẩn trọng với dữ liệu cá nhân: tên, số điện thoại, email được pháp luật về bảo vệ dữ liệu cá nhân của Việt Nam và Singapore bảo vệ; đừng thu thập nếu không có cơ sở hợp pháp.
  • Không làm quá tải website: nếu hoạt động của bạn làm chậm trang của người khác, bạn đang gây hại cho họ.

Ví dụ: Python với proxy và giới hạn tốc độ

Đoạn code dưới đây kiểm tra robots.txt, đi qua proxy, nghỉ giữa các request và lùi lại khi bị giới hạn. Cài bằng pip install requests, đặt biến môi trường PROXY dạng http://USER:PASS@HOST:PORT:

Python
import os
import random
import time
from urllib import robotparser

import requests

AGENT = "price-monitor/1.0 (lien he: [email protected])"
PROXY = os.environ["PROXY"]

session = requests.Session()
session.proxies = {"http": PROXY, "https": PROXY}
session.headers["User-Agent"] = AGENT

robots = robotparser.RobotFileParser("https://example.com/robots.txt")
robots.read()


def wait_after(response, attempt):
    try:
        return int(response.headers["Retry-After"])
    except (KeyError, ValueError):
        return 5 * 2 ** attempt


def fetch(url, tries=4):
    for attempt in range(tries):
        try:
            r = session.get(url, timeout=30)
        except requests.RequestException:
            time.sleep(5 * 2 ** attempt)  # mạng chậm hoặc proxy đang đổi IP
            continue
        if r.status_code in (429, 503):
            time.sleep(wait_after(r, attempt))
            continue
        r.raise_for_status()
        return r.text
    raise RuntimeError("bỏ qua sau nhiều lần thử: " + url)


for url in ["https://example.com/p/1", "https://example.com/p/2"]:
    if not robots.can_fetch(AGENT, url):
        continue
    html = fetch(url)
    # ... đọc dữ liệu cần thiết từ html ...
    time.sleep(random.uniform(2, 5))  # vài giây một request

Proxy 4G Singapore của 65Proxy có hợp không?

Hợp khi bạn cần dữ liệu như người dùng Singapore thấy, từ những trang soi kỹ IP, với khối lượng vừa phải — ví dụ theo dõi giá vài trăm sản phẩm trên sàn Singapore mỗi ngày. Mỗi gói có 200GB băng thông, giá 1 ngày $4, 7 ngày $13, 1 tháng $40.

Nếu bạn cần hàng triệu trang mỗi ngày, proxy datacenter hay proxy dân cư xoay theo request thường kinh tế hơn — chúng tôi nói thẳng điều đó để bạn chọn đúng.

Câu hỏi thường gặp

Tuỳ dữ liệu, cách làm và điều khoản của website. Dữ liệu công khai, thu thập với tốc độ hợp lý, không chứa dữ liệu cá nhân thường ít rủi ro hơn; nếu dự án lớn hay liên quan dữ liệu cá nhân, hãy hỏi ý kiến pháp lý.

Bao nhiêu băng thông là đủ?

Phụ thuộc kích thước trang. Hãy đo một trang điển hình (tab Network của trình duyệt, hoặc tổng dung lượng tải về trong script), nhân với số trang mỗi ngày — rồi so với 200GB mỗi gói.

Có nên dùng trình duyệt tự động (Playwright) không?

Chỉ khi trang cần JavaScript để hiện dữ liệu. Trình duyệt tốn băng thông và tài nguyên hơn nhiều so với request thường. Cách dùng proxy với Playwright có trong bài đổi IP proxy bằng API.