
Lucas Mitchell
Automation Engineer

curl_cffi.Việc quét dữ liệu các vị trí công việc đã trở thành nền tảng cho các công ty tuyển dụng, nhà nghiên cứu thị trường và các trang tổng hợp việc làm. Tuy nhiên, các bảng việc làm lớn đã triển khai các biện pháp an ninh phức tạp có thể dừng việc thu thập dữ liệu của bạn chỉ trong vài giây. Nếu bạn từng gặp phải việc bị cấm IP ngay lập tức hoặc vòng xác minh vô tận khi cố gắng quét các vị trí công việc, bạn không phải là người duy nhất. Thách thức nằm ở việc làm cho các tập lệnh tự động của bạn không thể phân biệt được với hành vi duyệt web của con người. Hướng dẫn này cung cấp một lộ trình kỹ thuật toàn diện để giúp bạn quét các vị trí công việc hiệu quả trong khi duy trì mức độ phát hiện thấp.
Các nền tảng việc làm và các trang mạng chuyên nghiệp đầu tư rất nhiều vào an ninh để bảo vệ dữ liệu độc quyền của họ và đảm bảo ổn định của trang web. Họ chủ yếu sử dụng bốn lớp phát hiện để xác định và chặn các công cụ quét.
Hầu hết các bảng việc làm theo dõi số lượng yêu cầu đến từ một địa chỉ IP duy nhất. Nếu bạn vượt quá ngưỡng nhất định, IP của bạn sẽ bị cấm tạm thời hoặc vĩnh viễn. Các IP trung tâm dữ liệu đặc biệt dễ bị tổn thương vì chúng dễ dàng được nhận biết là thuộc về các trang trại máy chủ thay vì người dùng thực tế.
Các hệ thống chống bot hiện đại như Cloudflare và DataDome không chỉ xem xét User-Agent của bạn. Chúng phân tích giao thức TLS (Transport Layer Security) của bạn, kiểm tra các bộ mã hóa và mở rộng cụ thể. Nếu tập lệnh Python của bạn sử dụng thư viện requests mặc định, dấu vân tay JA3 của nó sẽ ngay lập tức cho thấy rằng nó là một bot.
Người dùng thực tế không nhấp vào liên kết mỗi 0,5 giây hoặc di chuyển theo các mẫu tuyến tính hoàn hảo. Các công cụ quét có hành vi giống robot - như khoảng thời gian yêu cầu cố định hoặc thiếu việc tải CSS/hình ảnh - sẽ nhanh chóng bị các động cơ phân tích hành vi phát hiện.
Khi trang web nghi ngờ nhưng chưa chắc chắn, nó sẽ kích hoạt một thách thức. Điều này có thể là kiểm tra thực thi JavaScript đơn giản hoặc CAPTCHA phức tạp. Nếu không có cách tự động giải quyết, quy trình quét của bạn sẽ dừng hoàn toàn.
Để xây dựng một công cụ quét bền bỉ, bạn phải đối phó với từng lớp phát hiện bằng các biện pháp kỹ thuật cụ thể.
Sử dụng một IP duy nhất là cách nhanh nhất để bị chặn. Thay vào đó, bạn nên sử dụng một nhóm proxy nhà ở. Khác với các IP trung tâm dữ liệu, các IP nhà ở được cấp bởi các nhà cung cấp dịch vụ internet (ISP) cho các hộ gia đình thực tế, khiến chúng khó phân biệt hơn với lưu lượng hợp lệ.
| Loại Proxy | Rủi ro phát hiện | Chi phí | Trường hợp sử dụng tốt nhất |
|---|---|---|---|
| Trung tâm dữ liệu | Cao | Thấp | Các trang web bảo mật thấp, kiểm tra |
| Nhà ở | Thấp | Trung bình | Các bảng việc làm và công cụ tìm kiếm bảo mật cao |
| Di động (4G/5G) | Rất thấp | Cao | Các hệ thống chống bot rất mạnh |
Khi bạn quét các vị trí công việc, hãy đảm bảo nhà cung cấp proxy của bạn hỗ trợ xoay vòng tự động. Điều này đảm bảo rằng mỗi yêu cầu - hoặc mỗi phiên - xuất phát từ một vị trí địa lý và IP khác nhau.
Như đã đề cập trước đó, các thư viện tiêu chuẩn như requests hoặc urllib có dấu vân tay TLS đặc trưng. Để giải quyết vấn đề này, bạn nên sử dụng curl_cffi, cho phép tập lệnh của bạn giả lập giao thức TLS của trình duyệt thực tế như Chrome hoặc Firefox.
from curl_cffi import requests
# Giả lập dấu vân tay TLS của Chrome 120
response = requests.get(
"https://www.target-job-board.com/jobs?q=software+engineer",
impersonate="chrome120",
headers={
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
"Accept-Language": "en-US,en;q=0.9",
}
)
print(response.status_code)
Bằng cách đồng bộ User-Agent của bạn với hồ sơ TLS tương ứng, bạn sẽ giảm đáng kể khả năng bị chặn bởi Cloudflare hoặc Akamai.
Ngay cả khi có các tiêu đề và proxy hoàn hảo, bạn sẽ sớm gặp phải một thách thức. Các bảng việc làm thường sử dụng Cloudflare Turnstile hoặc reCAPTCHA để xác minh người dùng. Việc giải quyết thủ công chúng là không thể ở quy mô lớn. Đây là lúc CapSolver trở thành một phần thiết yếu trong hệ thống tự động của bạn.
CapSolver cung cấp API liền mạch để giải các loại CAPTCHA khác nhau. Ví dụ, nếu bạn gặp phải thách thức Cloudflare Turnstile khi sử dụng API tìm kiếm việc làm hoặc quét các nền tảng việc làm lớn, bạn có thể sử dụng triển khai chính thức sau:
import requests
import time
api_key = "YOUR_CAPSOLVER_API_KEY"
site_key = "0x4XXXXXXXXXXXXXXXXX" # Được tìm thấy trong HTML của trang đích
site_url = "https://www.target-job-board.com"
def solve_turnstile():
payload = {
"clientKey": api_key,
"task": {
"type": 'AntiTurnstileTaskProxyLess',
"websiteKey": site_key,
"websiteURL": site_url
}
}
res = requests.post("https://api.capsolver.com/createTask", json=payload)
task_id = res.json().get("taskId")
if not task_id:
return None
while True:
time.sleep(1)
result_res = requests.post("https://api.capsolver.com/getTaskResult", json={"clientKey": api_key, "taskId": task_id})
result = result_res.json()
if result.get("status") == "ready":
return result.get("solution", {}).get('token')
if result.get("status") == "failed":
return None
token = solve_turnstile()
Tích hợp điều này vào quy trình làm việc của bạn đảm bảo rằng công cụ quét của bạn có thể tiếp tục nhiệm vụ mà không cần can thiệp của con người, duy trì hiệu quả của luồng dữ liệu của bạn.
Nhận mã ưu đãi CapSolver của bạn
Tăng ngân sách tự động hóa của bạn ngay lập tức!
Sử dụng mã ưu đãi CAP26 khi nạp tiền vào tài khoản CapSolver để nhận thêm 5% ưu đãi cho mỗi lần nạp tiền — không giới hạn.
Nhận mã ưu đãi ngay bây giờ trong Bảng điều khiển CapSolver
Một sai lầm phổ biến là gửi các yêu cầu "trần" (không có thông tin). Các trình duyệt thực tế luôn gửi tiêu đề Referer và các tiêu đề Sec-CH-UA (Client Hints). Khi bạn quét các vị trí công việc, luôn đặt REFERER thành trang chủ của trang hoặc trang kết quả tìm kiếm trước đó.
https://www.google.com/ hoặc tên miền của trang.gzip, deflate, br (đảm bảo mã của bạn có thể giải nén các định dạng này).| Chiến lược | Hiệu quả | Nỗ lực triển khai | Được khuyến khích cho |
|---|---|---|---|
| Python Requests cơ bản | Rất thấp | Thấp | Các blog cá nhân không được bảo vệ |
| Trình duyệt ẩn (Selenium) | Trung bình | Trung bình | Các trang có JavaScript nặng |
| Trình duyệt ẩn + Proxy | Cao | Cao | Các nền tảng việc làm bảo mật cao |
| API quét dữ liệu web | Rất cao | Thấp | Trích xuất dữ liệu việc làm quy mô doanh nghiệp |
Mặc dù thành công kỹ thuật là quan trọng, bạn cũng phải ưu tiên thu thập dữ liệu có đạo đức. Luôn kiểm tra tệp robots.txt của trang và điều khoản dịch vụ. Theo hướng dẫn từ Tổ chức Truyền thông Thế giới (W3C), việc thu thập dữ liệu có đạo đức bao gồm việc tôn trọng sức khỏe của máy chủ đích bằng cách không làm quá tải nó với các yêu cầu quá mức. Ngoài ra, Tổ chức Tiền tuyến Điện tử nhấn mạnh rằng việc quét dữ liệu công khai thường được bảo vệ, nhưng bạn nên tránh truy cập thông tin cá nhân của người dùng hoặc vượt qua hàng rào đăng nhập mà không có sự cho phép.
Việc quét các vị trí công việc mà không bị chặn đòi hỏi một cách tiếp cận đa lớp. Bằng cách kết hợp xoay vòng proxy nhà ở, giả lập dấu vân tay TLS và giải CAPTCHA tự động thông qua CapSolver, bạn có thể xây dựng một hệ thống bền bỉ mô phỏng hành vi của con người. Hãy nhớ rằng, bối cảnh quét dữ liệu web đang thay đổi liên tục; việc cập nhật xu hướng quản lý bảo mật mới là chìa khóa để duy trì lợi thế cạnh tranh của bạn.
Thông thường, việc quét các vị trí công việc công khai là hợp pháp ở nhiều khu vực, miễn là bạn không vi phạm Đạo luật Lừa đảo Máy tính và Lừa đảo (CFAA) hoặc luật bản quyền. Luôn tham vấn luật sư cho các trường hợp cụ thể.
Đối với các trang web bảo mật cao, tốt nhất là xoay IP cho mỗi yêu cầu hoặc mỗi vài phút để tránh phát hiện mẫu.
Nhiều nền tảng chuyên nghiệp rất hạn chế. Mặc dù một số hồ sơ công khai và việc làm có thể hiển thị, nhưng phần lớn dữ liệu nằm sau hàng rào đăng nhập. Việc quét sau hàng rào đăng nhập mang lại rủi ro pháp lý và kỹ thuật cao hơn.
Các trình duyệt ẩn tiêu chuẩn như Puppeteer hoặc Selenium để lại "dấu vân tay" như navigator.webdriver = true. Bạn nên sử dụng các tiện ích mở rộng như stealth để ẩn các thuộc tính này.
Cách hiệu quả nhất để tránh bị cấm IP là kết hợp proxy nhà ở và khoảng thời gian yêu cầu ngẫu nhiên (jitter).
Học kiến trúc gỡ mã web Rust có thể mở rộng với reqwest, scraper, gỡ mã bất đồng bộ, gỡ mã trình duyệt không đầu, xoay proxy và xử lý CAPTCHA tuân thủ.

Tự động hóa việc giải CAPTCHA với Nanobot và CapSolver. Sử dụng Playwright để giải reCAPTCHA và Cloudflare tự động.
