1. Công nghệ anti-bot: Ai đang chơi trò mèo vờn chuột?
Hôm nay, chúng ta sẽ bước vào một trong những chủ đề hấp dẫn nhất (và có thể nói là gây tranh cãi nhất) trong web scraping — vượt qua bảo vệ bot và xử lý CAPTCHA. Cũng giống như cuộc sống của một lập trình viên, với mỗi con bu-lông lắt léo đều sẽ có một chiếc đai ốc có ren ngược. Vậy nên hãy xem chúng ta có thể vượt qua những chướng ngại vật này như thế nào.
Trước khi bắt đầu tìm cách lách qua, hãy hiểu rõ những gì chúng ta đang đối mặt. Công nghệ anti-bot là những hệ thống bảo vệ website khỏi sự chú ý quá mức, thường là không mong muốn, từ các chương trình tự động. Dưới đây là một số phương pháp phổ biến:
- CAPTCHA: CAPTCHA giống như vũ khí hạt nhân trong thế giới anti-bot. Mục tiêu là lọc bỏ các yêu cầu từ bot bằng cách đưa ra các nhiệm vụ yêu cầu sự tham gia của con người: ví dụ như chọn tất cả các hình ảnh có chó Dachshund hoặc nhập vào một chuỗi ký tự bị làm mờ.
- Phân tích hành vi: Một số website đánh giá cách bạn điền form nhanh thế nào hay tương tác với các phần tử trên trang. Quá nhanh? Và thế là bạn bị cấm.
- Độ trễ và giới hạn yêu cầu: Nếu website nghi ngờ bạn không phải con người, nó có thể tăng độ trễ giữa các yêu cầu hoặc chặn bạn hoàn toàn.
2. Các phương pháp bypass anti-bot
Bây giờ, khi đã biết được kẻ thù, hãy xem một số phương pháp để vượt qua chúng.
Giải quyết CAPTCHA
Cách rõ ràng nhất và cũng khó nhất — đó là tự động hóa việc giải quyết CAPTCHA. Đúng vậy, điều này có thể, nhưng bạn cần công cụ nhất định và dịch vụ từ bên thứ ba. CAPTCHA có nhiều loại, bao gồm CAPTCHA dạng văn bản, hình ảnh và thậm chí cả âm thanh.
Để tự động hóa việc giải CAPTCHA, bạn có thể sử dụng API từ các dịch vụ như 2Captcha hoặc Anti-Captcha, nơi cung cấp giải pháp CAPTCHA với một khoản phí nhỏ. Hãy xem cách triển khai nó trong thực tế:
import requests
def solve_captcha(api_key, site_url, captcha_image_url):
# Tải ảnh CAPTCHA
captcha_image = requests.get(captcha_image_url).content
# Gửi ảnh đến dịch vụ và nhận ID nhiệm vụ
response = requests.post("http://2captcha.com/in.php", files={'file': captcha_image}, data={'key': api_key, 'method': 'post'})
captcha_id = response.text.split('|')[1]
# Nhận kết quả CAPTCHA
solution_url = f"http://2captcha.com/res.php?key={api_key}&action=get&id={captcha_id}"
solution_response = requests.get(solution_url)
while 'CAPCHA_NOT_READY' in solution_response.text:
solution_response = requests.get(solution_url)
return solution_response.text.split('|')[1]
# Ví dụ sử dụng hàm
api_key = 'KEY_2CAPTCHA_CỦA_BẠN'
site_url = 'https://example.com'
captcha_image_url = 'https://example.com/captcha_image'
captcha_solution = solve_captcha(api_key, site_url, captcha_image_url)
print("Giải CAPTCHA:", captcha_solution)
Đoạn code trên minh họa cách tạo yêu cầu để giải quyết CAPTCHA. Tuy nhiên, những phương pháp này có thể không hiệu quả với các bài toán khó hoặc nếu website liên tục thay đổi thuật toán.
Giả lập hành vi con người
Một cách khác để lừa gạt là giả lập hành vi con người. Bạn có thể tạo độ trễ ngẫu nhiên trong script của mình, thay đổi user-agent, mô phỏng tương tác hai chiều và thậm chí sử dụng kỹ thuật chuyển động chuột với Selenium:
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time
driver = webdriver.Chrome()
driver.get('https://example.com')
# Mô phỏng chuyển động chuột
actions = ActionChains(driver)
element = driver.find_element_by_id('button')
actions.move_to_element(element)
actions.perform()
# Tạo độ trễ để tương tác tự nhiên hơn
time.sleep(2)
# Thực hiện hành động
element.click()
Chúng ta sẽ nói chi tiết hơn về Selenium trong các bài giảng sắp tới.
Sử dụng IP động và proxy
Bạn cũng có thể sử dụng proxy để thay đổi địa chỉ IP mà các yêu cầu được gửi đi. Điều này có thể giúp vượt qua giới hạn số lượng yêu cầu từ một IP. Các dịch vụ như Bright Data và Smartproxy có thể hỗ trợ điều này.
import requests
proxy = {
"http": "http://123.456.789.012:8080",
"https": "http://123.456.789.012:8080",
}
response = requests.get('https://example.com', proxies=proxy)
print(response.content)
3. Một số lưu ý quan trọng
Việc thực hiện bypass bảo vệ bot yêu cầu nhiều kiến thức và thử nghiệm. Quan trọng là cần nhớ rằng không phải phương pháp nào cũng hợp pháp hoặc được website chấp thuận. Luôn kiểm tra những gì được phép trong "robots.txt", và tuân thủ Nguyên tắc Tốt trong web scraping để tránh tạo tải quá nặng cho server. Điều này không chỉ giúp bạn tránh rắc rối pháp lý mà còn thể hiện sự tôn trọng với công sức của người khác.
Đừng bao giờ chạy parser quan trọng từ IP nhà bạn. Với những buổi học, sẽ không sao, nhưng nếu script của bạn vô tình làm sập một server bằng cách gửi hàng ngàn yêu cầu cùng lúc, thì bạn sẽ nhận được câu hỏi. Và sau đó, sẽ có người đến để hỏi những câu đó trực tiếp.
GO TO FULL VERSION