1. Giới thiệu về hạn chế scraping trên web
Hôm nay tụi mình sẽ bàn luận một chủ đề khá thú vị — làm sao để vượt qua các hạn chế scraping trên web. Mỗi lập trình viên quan tâm đến scraping sẽ sớm hay muộn đối mặt với những hạn chế và chặn từ các trang web. Đã đến lúc tìm hiểu cách làm sao để bọn mình không bị hệ thống bảo vệ của các trang web bắt lại và vẫn tiếp tục thu thập dữ liệu mà không làm máy chủ "nổi giận".
Khi bạn gửi request đến các trang web, thực chất là bạn đang "thâm nhập" không gian cá nhân của chúng để lấy dữ liệu mà chúng muốn bảo vệ. Nhưng tại sao trang web lại gây khó dễ? Có nhiều lý do: bảo vệ quyền sở hữu trí tuệ, đảm bảo độ tin cậy và hiệu năng của máy chủ, ngăn chặn sử dụng trái phép dữ liệu. Nếu bạn sử dụng quá nhiều tài nguyên của trang web hoặc vi phạm quy tắc, bạn có thể bị... banned. Và không ai thích bị ban cả, trừ quản trị viên server.
2. Cấu hình user-agent
user-agent là gì?
User-agent là một chuỗi nhận dạng mà trình duyệt của bạn gửi đi cùng với mỗi HTTP request. Nó cho máy chủ biết trình duyệt và hệ điều hành của bạn là gì. Và bạn biết không? Chuỗi user-agent này có thể dễ dàng giả mạo để máy chủ nghĩ rằng bạn đang truy cập từ một chiếc iPhone đời mới nhất thay vì từ một script Python bạn chạy trong lúc uống cafe.
Ví dụ thay đổi user-agent
Trong thư viện requests, việc thay đổi user-agent khá đơn giản. Dưới đây là một ví dụ nhỏ:
import requests
url = "https://example.com"
# Cấu hình user-agent như trình duyệt Chrome
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36"
}
response = requests.get(url, headers=headers)
print(response.content)
Giả mạo user-agent giống như bạn đi dự tiệc công ty trong bộ đồ gấu trúc. Nhìn như bạn, nhưng lại khác. Máy chủ, khi thấy "trình duyệt" thay vì "script", có thể sẽ để bạn qua cửa.
3. Làm việc với cookies
Cookies là gì?
Cookies là những mẩu dữ liệu nhỏ mà trang web lưu lại trên trình duyệt của bạn. Chúng có thể chứa các loại dữ liệu khác nhau, từ cài đặt trang web đến ID phiên, cho phép bạn giữ đăng nhập sau khi login.
Sử dụng cookies trong request
Làm việc với cookies trong requests cũng không khó. Thường thì bạn sẽ nhận được cookies khi gửi request đầu tiên đến trang web, sau đó sử dụng chúng trong các request tiếp theo:
# Tạo session để giữ cookies
session = requests.Session()
# Gửi request đầu tiên, thu thập cookies
session.get(url)
# Sử dụng cùng cookies trong các request tiếp theo
response = session.get(url)
print(response.content)
Session giống như phương tiện công cộng cho cookies. Chúng đi cùng bạn từ trang này sang trang khác, giữ lại các cài đặt của bạn.
4. Phương pháp tránh bị block
Mẹo thực tế để giảm nguy cơ bị block
Một vài mẹo nhỏ:
- Thêm độ trễ giữa các request: thêm độ trễ ngẫu nhiên giữa các request để tránh bị nghi ngờ.
- Thay đổi địa chỉ IP: sử dụng VPN hoặc proxy để thay đổi địa chỉ IP, tránh bị chặn theo IP.
- Thay đổi
user-agent: thay đổiuser-agentcho mỗi request để trông như các trình duyệt khác nhau.
Ví dụ áp dụng delay và thay đổi IP
Sử dụng thư viện time để thêm độ trễ:
import time
import random
for _ in range(10):
response = session.get(url)
# Độ trễ ngẫu nhiên
time.sleep(random.uniform(1, 3))
Để thay đổi IP trong requests, bạn có thể sử dụng proxy:
proxies = {
"http": "http://10.10.10.10:8000",
"https": "https://10.10.10.10:8000",
}
response = requests.get(url, proxies=proxies)
5. Các phương pháp lừa khác
Để script trông không đáng ngờ, hãy sử dụng headers và cookies để giả lập người dùng thật. Nhớ: sự chân thật là "vũ khí bí mật" của bạn trong cuộc chiến với ban.
Vậy là bài học hôm nay đã kết thúc. Áp dụng những kỹ thuật này sẽ giúp bạn "ẩn mình" trong radar của các trang web và tiếp tục thu thập dữ liệu mà không bị block. Nhớ rằng, giống như bất kỳ siêu anh hùng nào, bạn cũng có trách nhiệm — hãy sử dụng những kỹ thuật này một cách có đạo đức và theo pháp luật. Hãy tin vào khả năng của mình, và code của bạn sẽ đẹp như bước nhảy của mèo trên bàn phím!
GO TO FULL VERSION