Bị chặn CAPTCHA ở trang 47: Bài học đắt giá khi cào dữ liệu web
Tác giả từng tự tin với thiết lập cào dữ liệu (scraping) của mình, nhưng lại liên tục bị chặn bởi CAPTCHA ngay từ trang thứ 47. Dù đã thử thay đổi độ trễ và sử dụng nhiều nhà cung cấp proxy khác nhau, giải pháp cuối cùng vẫn là sử dụng dịch vụ giải mã CAPTCHA trả phí. Bài viết chia sẻ kinh nghiệm thực tế và góc nhìn về việc tôn trọng cơ chế bảo mật của website.

Tôi từng nghĩ mình khá thông minh với thiết lập cào dữ liệu (web scraping) của mình. Tốc độ 10 yêu cầu mỗi phút, xoay vòng User-Agent, và sử dụng residential proxy. Nhưng đến trang 47, CAPTCHA xuất hiện. Trang 48, CAPTCHA. Trang 49, CAPTCHA. Thật là những lúc "vui vẻ".
Website đó đã quyết định rằng tôi là một bot ngay khi tôi chạm đến một ngưỡng nào đó. Việc tôi đi chậm hay giả lập giống trình duyệt thật đều không quan trọng. Bức tường CAPTCHA xuất hiện như một định mệnh, bắt đầu từ trang 47.
Điều đầu tiên tôi thử là tăng độ trễ. 30 giây giữa các yêu cầu. Vẫn bị chặn ở trang 47. Thật thú vị.
Sau đó, tôi thử các nhà cung cấp proxy khác nhau. Ba nhà cung cấp. Kết quả vẫn y hệt, cùng một số trang. Lúc này, tôi tin rằng ngưỡng giới hạn liên quan đến địa chỉ IP của mình, nhưng không, điều tương tự cũng xảy ra với các IP mới tinh.
Hóa ra là website đó thực sự, thực sự rất ghét việc bị cào dữ liệu tự động. Và tôi quá cứng đầu để bỏ cuộc.
Cuối cùng, tôi đành "cắn răng" trả tiền cho dịch vụ 2captcha. Nếu bạn chưa biết, họ giải quyết CAPTCHA bằng người thật (hoặc các mô hình rất tốt, điều này không rõ ràng). Việc tích hợp trông như sau:
import time
from twocaptcha import TwoCaptcha
solver = TwoCaptcha('YOUR_API_KEY')
def scrape_with_captcha_handling(url):
response = requests.get(url, headers=headers)
if 'captcha' in response.text:
# Tìm hình ảnh/sitekey của CAPTCHA
captcha_element = response.text.find('data-sitekey')
sitekey = extract_between(response.text, 'data-sitekey="', '"')
# Gửi tới 2captcha
result = solver.turnstile(sitekey=sitekey, url=url)
# Thử lại với token
response = requests.post(
url + '/verify',
data={'captcha_token': result['code']}
)
return parse_page(response)
Không hề tinh tế chút nào. Nhưng nó hoạt động.
Sự thật mà không ai muốn nghe: nếu một website ném CAPTCHA vào mặt bạn, có lẽ bạn không nên cào nó nữa. Tôi biết, tôi biết, điều này không giúp ích gì. Nhưng thành thật mà nói? Nếu một website quyết liệt chặn bot đến thế, thường là có lý do. Hoặc họ đang bảo vệ thứ gì đó giá trị, hoặc họ lo ngại về trách nhiệm pháp lý, hoặc cả hai.
Tuy nhiên, nếu bạn thực sự cần dữ liệu và website không cung cấp API, 2captcha là giải pháp cuối cùng. Tốn tiền, tăng độ trễ (latency), nhưng bạn sẽ lấy được dữ liệu.
Trong trường hợp của tôi, nó vẫn đáng giá.
Bài viết liên quan

Phần mềm
Anthropic ra mắt Claude Opus 4.7: Nâng cấp mạnh mẽ cho lập trình nhưng vẫn thua Mythos Preview
16 tháng 4, 2026

Công nghệ
Qwen3.6-35B-A3B: Quyền năng Lập trình Agentic, Nay Đã Mở Cửa Cho Tất Cả
16 tháng 4, 2026

Công nghệ
Spotify thắng kiện 322 triệu USD từ nhóm pirate Anna's Archive nhưng đối mặt với bài toán thu hồi
16 tháng 4, 2026
