Hầu hết các trang web có giá trị cao đều sử dụng CAPTCHA như một phần của biện pháp bảo vệ chống bot. Hướng dẫn này bao gồm các chiến lược để thu thập dữ liệu các trang web này một cách đáng tin cậy bằng cách sử dụng CaptchaAI, bao gồm cách xác định các loại CAPTCHA, giải quyết chúng một cách tự động và xây dựng các công cụ thu thập dữ liệu linh hoạt.
Triển khai CAPTCHA phổ biến
| CAPTCHA | Nơi sử dụng | Phương pháp CaptchaAI |
|---|---|---|
| reCAPTCHA v2 | Các hình thức đăng nhập, trang tìm kiếm | method=userrecaptcha |
| reCAPTCHA v3 | Tính điểm nền trên bất kỳ trang nào | method=userrecaptcha&version=v3 |
| Cloudflare Turnstile | Các trang web đằng sau Cloudflare | method=turnstile |
| Cloudflare Challenge | Khối Cloudflare toàn trang | method=cloudflare_challenge |
| Hình ảnh/OCR CAPTCHA | Các trang web kế thừa, Amazon | method=base64 |
| hCaptcha | Các trang web tập trung vào quyền riêng tư | method=hcaptcha |
Chiến lược 1: Phát hiện và giải quyết theo yêu cầu
Cách tiếp cận đáng tin cậy nhất – quét bình thường và chỉ giải CAPTCHA khi chúng xuất hiện:
import requests
import time
from bs4 import BeautifulSoup
API_KEY = "YOUR_API_KEY"
class ProtectedScraper:
def __init__(self):
self.session = requests.Session()
self.session.headers.update({
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
})
def scrape(self, url):
resp = self.session.get(url)
# Check for CAPTCHA
if self._has_captcha(resp.text):
resp = self._handle_captcha(resp.text, url)
return resp.text
def _has_captcha(self, html):
indicators = ["g-recaptcha", "cf-turnstile", "h-captcha", "captcha"]
return any(ind in html.lower() for ind in indicators)
def _handle_captcha(self, html, url):
soup = BeautifulSoup(html, "html.parser")
# reCAPTCHA v2
rc = soup.find("div", class_="g-recaptcha")
if rc:
token = self._solve_recaptcha(rc["data-sitekey"], url)
return self.session.post(url, data={"g-recaptcha-response": token})
# Cloudflare Turnstile
ts = soup.find("div", class_="cf-turnstile")
if ts:
token = self._solve_turnstile(ts["data-sitekey"], url)
return self.session.post(url, data={"cf-turnstile-response": token})
raise Exception("Unknown CAPTCHA type")
def _solve_recaptcha(self, site_key, page_url):
resp = requests.get("https://ocr.captchaai.com/in.php", params={
"key": API_KEY, "method": "userrecaptcha",
"googlekey": site_key, "pageurl": page_url
})
return self._poll(resp.text.split("|")[1])
def _solve_turnstile(self, site_key, page_url):
resp = requests.get("https://ocr.captchaai.com/in.php", params={
"key": API_KEY, "method": "turnstile",
"sitekey": site_key, "pageurl": page_url
})
return self._poll(resp.text.split("|")[1])
def _poll(self, task_id):
for _ in range(60):
time.sleep(5)
result = requests.get("https://ocr.captchaai.com/res.php", params={
"key": API_KEY, "action": "get", "id": task_id
})
if result.text == "CAPCHA_NOT_READY": continue
if result.text.startswith("OK|"): return result.text.split("|")[1]
raise Exception(result.text)
raise TimeoutError()
# Usage
scraper = ProtectedScraper()
html = scraper.scrape("https://example.com/data")
Chiến lược 2: Giải quyết trước các trang CAPTCHA đã biết
Nếu bạn biết trang nào luôn có CAPTCHA, hãy giải quyết trước:
def scrape_known_captcha_page(url, site_key):
# Solve before even loading the page
token = solve_recaptcha(site_key, url)
# Submit directly with token
resp = requests.post(url, data={
"g-recaptcha-response": token,
"query": "search term"
})
return resp.text
Chiến lược 3: Các trang web được bảo vệ bằng Cloudflare
Các trang web đằng sau Cloudflare thường yêu cầu cookie <staging-session-cookie>:
def get_cloudflare_clearance(url, proxy):
resp = requests.get("https://ocr.captchaai.com/in.php", params={
"key": API_KEY,
"method": "cloudflare_challenge",
"pageurl": url,
"proxy": proxy,
"proxytype": "HTTP"
})
task_id = resp.text.split("|")[1]
for _ in range(60):
time.sleep(5)
result = requests.get("https://ocr.captchaai.com/res.php", params={
"key": API_KEY, "action": "get", "id": task_id
})
if result.text == "CAPCHA_NOT_READY": continue
if "<staging-session-cookie>" in result.text:
# Parse <staging-session-cookie> and user_agent from response
return result.text
raise TimeoutError()
Mẫu quét nhiều trang
def scrape_multiple_pages(base_url, site_key, pages):
scraper = ProtectedScraper()
results = []
for page in pages:
url = f"{base_url}?page={page}"
try:
html = scraper.scrape(url)
soup = BeautifulSoup(html, "html.parser")
items = soup.find_all("div", class_="item")
results.extend([item.text.strip() for item in items])
print(f"Page {page}: {len(items)} items")
except Exception as e:
print(f"Page {page} failed: {e}")
time.sleep(random.uniform(2, 5))
return results
Khắc phục sự cố
| vấn đề | sửa chữa |
|---|---|
| CAPTCHA xuất hiện trên mọi trang | Sử dụng proxy; giảm tỷ lệ yêu cầu |
| Mã thông báo bị từ chối sau khi giải quyết | Mã thông báo có thể đã hết hạn; sử dụng trong vòng 120s |
| Chặn Cloudflare mặc dù đã giải phóng mặt bằng | Sử dụng cùng một proxy và tác nhân người dùng cho tất cả các yêu cầu |
| Trang web trả về trang khác sau khi giải quyết | Kiểm tra các chuyển hướng hoặc cookie bổ sung |
Câu hỏi thường gặp
Những trang web nào khó cạo nhất?
Các trang web sử dụng Cloudflare Enterprise, PerimeterX hoặc Akamai Bot Manager là những trang thách thức nhất. CaptchaAI xử lý các thành phần CAPTCHA của chúng; kết hợp với các trình duyệt và proxy ẩn để có kết quả tốt nhất.
Tôi có thể xóa các trang web yêu cầu đăng nhập không?
Vâng. Trước tiên hãy đăng nhập (giải bất kỳ CAPTCHA đăng nhập nào), duy trì cookie phiên, sau đó loại bỏ các trang đã được xác thực. CaptchaAI xử lý CAPTCHA ở mọi giai đoạn.
Làm cách nào để xử lý các trang được hiển thị bằng JavaScript?
Sử dụng Selenium, Puppeteer hoặc Playwright để hiển thị JavaScript, sau đó trích xuất các tham số CAPTCHA và giải quyết thông qua CaptchaAI. Nhìn thấyXử lý CAPTCHA của Selenium.