Cách bỏ qua một trang web được bảo vệ bởi Cloudflare?

Senior Web Scraping Engineer
Cloudflare bảo vệ trang web có thể là một trong những trang web khó thu thập dữ liệu nhất. Hệ thống phát hiện bot tự động của nó yêu cầu bạn sử dụng một công cụ thu thập dữ liệu web mạnh mẽ để vượt qua các biện pháp chống thu thập dữ liệu của Cloudflare và trích xuất dữ liệu trang web của nó.
Hôm nay, chúng tôi sẽ chỉ cho bạn cách thu thập dữ liệu từ các trang web được Cloudflare bảo vệ bằng Python và thư viện Cloudscraper mã nguồn mở. Điều đó đang được nói, mặc dù hiệu quả trong một số trường hợp, bạn sẽ thấy rằng Cloudscraper có một số hạn chế khó tránh khỏi.
Quản lý Bot của Cloudflare là gì?
Cloudflare là một công ty cung cấp nội dung và bảo mật web. Nó cung cấp một tường lửa ứng dụng web (WAF) để bảo vệ các trang web khỏi các mối đe dọa bảo mật như kịch bản chéo trang (XSS), nhồi nhét thông tin đăng nhập và các cuộc tấn công DDoS.
Một trong những hệ thống cốt lõi của Cloudflare WAF là Bot Manager, giúp giảm thiểu các cuộc tấn công của bot độc hại mà không ảnh hưởng đến người dùng thực. Tuy nhiên, trong khi Cloudflare cho phép các bot thu thập dữ liệu đã biết như Google, nó cho rằng bất kỳ lưu lượng bot nào không xác định (bao gồm cả trình thu thập web) đều là độc hại.
Giới thiệu về Cloudflare WAF
Cloudflare WAF là một thành phần chính trong hệ thống bảo vệ cốt lõi của Cloudflare, được thiết kế để phát hiện và chặn các yêu cầu độc hại bằng cách phân tích lưu lượng HTTP / HTTPS theo thời gian thực. Nó lọc các mối đe dọa tiềm ẩn như tiêm SQL, kịch bản chéo trang (XSS), tấn công DDoS, v.v. dựa trên bộ quy tắc (bao gồm các quy tắc được xác định trước và các quy tắc tùy chỉnh).
Cloudflare WAF kết hợp cơ sở dữ liệu danh tiếng IP, mô hình phân tích hành vi và công nghệ học máy, và có thể điều chỉnh động các chiến lược bảo vệ để đáp ứng các cuộc tấn công mới. Ngoài ra, WAF được tích hợp liền mạch với CDN và bảo vệ DDoS của Cloudflare để cung cấp bảo mật nhiều lớp cho các trang web đồng thời duy trì độ trễ thấp và khả năng sẵn sàng cao cho người dùng hợp pháp.
Từ bảng dưới đây, bạn có thể thấy rõ các biện pháp bảo vệ của WAF và độ khó của việc bẻ khóa:
Lớp bảo vệ | Nguyên tắc kỹ thuật | Độ khó bẻ khóa |
---|---|---|
Phát hiện danh tiếng IP | Phân tích hành vi lịch sử của IP (ASN / vị trí địa lý) | ★★☆☆☆ |
Thử thách JS | Tạo động các bài toán để xác minh môi trường trình duyệt | ★★★☆☆ |
Dấu vân tay trình duyệt | Trích xuất tính năng hiển thị Canvas / WebGL | ★★★★☆ |
Token động | Xác minh token được mã hóa dựa trên thời gian | ★★★★☆ |
Phân tích hành vi | Nhận dạng quỹ đạo chuột / mẫu nhấp chuột | ★★★★★ |
Cloudflare phát hiện bot như thế nào?
Hệ thống quản lý bot của Cloudflare được thiết kế để phân biệt giữa bot độc hại và lưu lượng hợp pháp (chẳng hạn như trình thu thập dữ liệu công cụ tìm kiếm). Bằng cách phân tích các yêu cầu đến, nó xác định các mô hình bất thường và chặn các hoạt động đáng ngờ để duy trì tính toàn vẹn của các trang web và ứng dụng của bạn.
Các phương pháp phát hiện của nó có thể là thụ động hoặc chủ động. Các kỹ thuật phát hiện bot thụ động sử dụng dấu vân tay phía sau, trong khi các kỹ thuật phát hiện chủ động dựa trên phân tích phía máy khách.
- Các kỹ thuật phát hiện bot thụ động
- Phát hiện botnet
- Danh tiếng địa chỉ IP
- Tiêu đề yêu cầu HTTP
- Dấu vân tay TLS
- Dấu vân tay HTTP / 2
- Các kỹ thuật phát hiện bot chủ động
- CAPTCHA
- Dấu vân tay Canvas
- Theo dõi sự kiện
- Truy vấn API môi trường
3 lỗi chính của Cloudflare
- Lỗi Cloudflare 1015: Nó là gì và cách tránh
- Lỗi Cloudflare 1006, 1007, 1008: Chúng là gì và cách khắc phục
- Cloudflare 403 Bị từ chối: Vượt qua vấn đề này
Làm thế nào để thu thập dữ liệu từ một trang web được Cloudflare bảo vệ?
Bước 1: Thiết lập môi trường
Đầu tiên, đảm bảo rằng Python được cài đặt trên hệ thống của bạn. Tạo một thư mục mới để lưu trữ mã cho dự án này. Tiếp theo, bạn cần cài đặt cloudscraper
và requests
. Bạn có thể làm điều này thông qua pip:
Shell
$ pip install cloudscraper requests
Bước 2: Thực hiện một yêu cầu đơn giản bằng requests
Bây giờ, chúng ta cần thu thập dữ liệu từ trang tại https://sailboatdata.com/sailboat/11-meter/ . Một phần nội dung của trang trông như thế này:
Chúng tôi bảo vệ quyền riêng tư của trang web một cách chắc chắn. Tất cả dữ liệu trong blog này là công khai và chỉ được sử dụng như một minh chứng cho quá trình thu thập dữ liệu. Chúng tôi không lưu bất kỳ thông tin và dữ liệu nào.

Hãy thử gửi một yêu cầu GET đơn giản bằng requests
để xác nhận:
Python
def sailboatdata():
html = requests.get("https://sailboatdata.com/sailboat/11-meter/")
print(html.status_code) # 403
with open("response.html", "wb") as f:
f.write(html.content)
Như mong đợi, trang web trả về mã trạng thái 403 Forbidden. Chúng tôi đã lưu phản hồi vào một tệp cục bộ. Mã nguồn cụ thể của nội dung được trả về được hiển thị bên dưới:

Trang web mục tiêu đang được bảo vệ và tệp cục bộ không thể được mở đúng cách. Bây giờ, chúng ta cần tìm cách để vượt qua điều này.
Bước 3: Thu thập dữ liệu bằng Cloudscraper
Hãy sử dụng Cloudscraper để gửi cùng một yêu cầu GET đến trang web mục tiêu. Đây là mã:
Python
def sailboatdata_cloudscraper():
scraper = cloudscraper.create_scraper()
html = scraper.get("https://sailboatdata.com/sailboat/11-meter/")
print(html.status_code) # 200
with open("response.html", "wb") as f:
f.write(html.content)
Lần này, Cloudflare đã không chặn yêu cầu của chúng tôi. Chúng tôi mở tệp HTML đã lưu cục bộ và xem nó trong trình duyệt. Trang trông như thế này:

Các tính năng nâng cao của Cloudscraper
Xử lý CAPTCHA tích hợp
JavaScript
scraper = cloudscraper.create_scraper(
captcha={
'provider': '2captcha',
'api_key': '2captcha_api_key'
}
)
Hỗ trợ Proxy tùy chỉnh
Python
proxies = {"http": "địa chỉ proxy của bạn", "https": "địa chỉ proxy của bạn"}
scraper = cloudscraper.create_scraper()
scraper.proxies.update(proxies)
html = scraper.get("https://sailboatdata.com/sailboat/11-meter/")
Trình duyệt thu thập dữ liệu Scrapeless: Một giải pháp thay thế mạnh mẽ hơn cho Cloudscraper
Hạn chế của Cloudscraper
Cloudscraper có một số hạn chế khi xử lý một số trang web được Cloudflare bảo vệ. Vấn đề đáng chú ý nhất là nó không thể vượt qua cơ chế bảo vệ phát hiện robot phiên bản 2 của Cloudflare. Nếu bạn cố gắng thu thập dữ liệu từ một trang web như vậy, bạn sẽ kích hoạt thông báo lỗi sau:
JSON
cloudscraper.exceptions.CloudflareChallengeError: Phát hiện một thử thách Cloudflare phiên bản 2, Tính năng này không khả dụng trong phiên bản mã nguồn mở (miễn phí).
Ngoài ra, Cloudscraper cũng không thể đối phó với các thử thách JavaScript nâng cao của Cloudflare. Những thử thách này thường liên quan đến các phép tính động phức tạp hoặc tương tác với các phần tử trang, điều này rất khó đối với các công cụ tự động như Cloudscraper để mô phỏng nhằm vượt qua xác minh.
Một vấn đề khác là chính sách giới hạn tốc độ của Cloudflare. Để ngăn chặn việc lạm dụng, Cloudflare kiểm soát chặt chẽ tần suất yêu cầu và Cloudscraper thiếu cơ chế hiệu quả để quản lý các giới hạn này, điều này có thể gây ra sự chậm trễ yêu cầu hoặc thậm chí là lỗi.
Cuối cùng nhưng không kém phần quan trọng, khi Cloudflare tiếp tục nâng cấp công nghệ phát hiện bot của mình, thì việc Cloudscraper, với tư cách là một công cụ mã nguồn mở, bắt kịp những thay đổi này là rất khó khăn. Theo thời gian, hiệu quả và độ ổn định của chức năng của nó có thể giảm dần, đặc biệt là khi đối mặt với các phiên bản mới của các cơ chế bảo vệ.
Tại sao Scrapeless lại hiệu quả?
Trình duyệt thu thập dữ liệu là một giải pháp hiệu suất cao để trích xuất một lượng lớn dữ liệu từ các trang web động. Nó cho phép các nhà phát triển chạy, quản lý và giám sát các trình duyệt không đầu mà không cần tài nguyên máy chủ chuyên dụng. Nó được thiết kế để trích xuất dữ liệu web hiệu quả, quy mô lớn:
- Mô phỏng hành vi tương tác của con người thực để vượt qua các cơ chế chống trình thu thập dữ liệu nâng cao như phát hiện dấu vân tay trình duyệt và phát hiện dấu vân tay TLS.
- Hỗ trợ giải quyết tự động nhiều loại mã xác minh, bao gồm cf_challenge, để đảm bảo quá trình thu thập dữ liệu không bị gián đoạn.
- Tích hợp liền mạch các công cụ phổ biến như Puppeteer và Playwright để đơn giản hóa quá trình phát triển và hỗ trợ mã dòng đơn để bắt đầu các tác vụ tự động.
Làm thế nào để tích hợp Trình duyệt thu thập dữ liệu để vượt qua Cloudflare?
Bước 1. Tạo mã thông báo API của bạn
- Đăng ký Scrapeless
- Chọn Quản lý Khóa API
- Nhấp vào Tạo Khóa API để tạo Khóa API Scrapeless của bạn.
Scrapeless đảm bảo thu thập dữ liệu web liền mạch.
🎁 Tham gia Discord và Yêu cầu dùng thử miễn phí ngay bây giờ!

Bước 2. Sau đó, hãy đến Trình duyệt thu thập dữ liệu và sao chép URL Trình duyệt của bạn.

Hoặc bạn có thể kiểm tra mã yêu cầu của chúng tôi làm tài liệu tham khảo:
JavaScript
const puppeteer = require('puppeteer-core');
const connectionURL = 'wss://browser.scrapeless.com/browser?token=<YOUR_API_TOKEN>&session_ttl=180&proxy_country=ANY';
(async () => {
const browser = await puppeteer.connect({browserWSEndpoint: connectionURL});
const page = await browser.newPage();
await page.goto('https://www.scrapeless.com');
console.log(await page.title());
await browser.close();
})();
Bước 3. Tích hợp mã hoặc URL trình duyệt vào tập lệnh Puppeteer của bạn:
JavaScript
const puppeteer = require('puppeteer-core');
const connectionURL = 'wss://browser.scrapeless.com/browser?token=<YOUR_Scrapeless_API_KEY>&session_ttl=180&proxy_country=ANY';
(async () => {
// thiết lập môi trường trình duyệt
const browser = await puppeteer.connect({
browserWSEndpoint: connectionURL,
});
// tạo một trang mới
const page = await browser.newPage();
// điều hướng đến một URL
await page.goto('https://sailboatdata.com/sailboat/11-meter/', {
waitUntil: 'networkidle0',
}); // Thay thế bằng URL mục tiêu của bạn
// chờ thử thách được giải quyết
await new Promise(function (resolve) {
setTimeout(resolve, 10000);
});
// chụp ảnh màn hình trang
await page.screenshot({ path: 'screenshot.png' });
// đóng phiên bản trình duyệt
await browser.close();
})();
4 Mẹo để Vượt qua Cloudflare
Nếu bạn muốn tự mình hack Cloudflare, điều đó sẽ rất khó! Bạn phải xem xét tất cả các biện pháp phòng thủ mà Cloudflare có chống lại bot và tìm cách để vượt qua chúng. Hầu hết mọi người chắc chắn sẽ không chọn làm điều này.
Bạn có muốn thử không? Dưới đây là một vài mẹo để giúp bạn vượt qua Cloudflare:
Hiển thị JavaScript
Cloudflare thường sử dụng các thử thách JavaScript để phát hiện bot. Các tập lệnh này được nhúng trong các trang web và thực hiện các kiểm tra cụ thể thông qua trình duyệt để xác định xem khách truy cập có phải là bot hay không. Nếu nghi ngờ là bot, Cloudflare sẽ hiển thị CAPTCHA (như mã xác minh Turnstile), nếu không, nó sẽ cho phép truy cập bình thường.
Do đó, để thu thập dữ liệu các trang được bảo vệ, bạn cần sử dụng các công cụ tự động hóa trình duyệt như Playwright, Selenium hoặc Puppeteer để mô phỏng tương tác của người dùng thực. Tuy nhiên, cấu hình mặc định của các trình duyệt không đầu có thể bị lộ đối với các hệ thống chống bot. Nên sử dụng các thư viện Playwright Stealth hoặc Puppeteer Stealth để ẩn dấu vết tự động hóa.
Giải quyết CAPTCHA
CAPTCHA là một bài kiểm tra chính để phân biệt bot với người. Nó có thể bao gồm xác minh nhấp chuột đơn giản hoặc các câu đố phức tạp. Việc phân tích CAPTCHA tự động là khó khăn, vì vậy bạn có thể thử bỏ qua nó bằng công nghệ Python hoặc sử dụng Trình giải mã Cloudflare Turnstile của Bright Data để tự động giải quyết nó.
Tránh giới hạn tốc độ
Cloudflare sẽ kích hoạt giới hạn tốc độ đối với quá nhiều yêu cầu trong một khoảng thời gian ngắn, điều này có thể khiến IP bị chặn tạm thời hoặc vĩnh viễn. Để tránh vấn đề này, nên sử dụng dịch vụ proxy (chẳng hạn như proxy dân cư) để thực hiện luân chuyển IP và ngụy trang yêu cầu như một thiết bị thực.
Làm giả trình duyệt
Mặc dù các công cụ tự động hóa trình duyệt có hiệu quả, nhưng chúng tiêu tốn rất nhiều tài nguyên. Nếu Cloudflare WAF không được cấu hình nghiêm ngặt, bạn có thể sử dụng công nghệ làm giả trình duyệt để gửi yêu cầu HTTP để bắt chước hành vi của trình duyệt thực (như đặt tiêu đề User-Agent). Tuy nhiên, trong các trường hợp phức tạp hơn, chỉ riêng tiêu đề có thể không đủ và bạn cũng cần sao chép dấu vân tay TLS của trình duyệt (như sử dụng công cụ curl-impersonate).
Kết thúc
Trong bài viết này, bạn đã tìm hiểu các mẹo và thủ thuật về cách thu thập dữ liệu từ các trang web được Cloudflare bảo vệ. Cloudflare là dịch vụ CDN phổ biến nhất trên thị trường và nó cũng cung cấp các giải pháp chống bot nâng cao.
Như bài viết này đã chỉ ra, việc vượt qua các biện pháp chống thu thập dữ liệu của Cloudflare là một thách thức, nhưng không phải là không thể. Mọi thứ trở nên dễ dàng hơn với các giải pháp thu thập dữ liệu chuyên nghiệp, nhanh chóng và đáng tin cậy, chẳng hạn như:
- Universal Scraping API: Tự động bỏ qua giới hạn tốc độ, dấu vân tay và các hạn chế chống bot khác để thu thập dữ liệu web công khai liền mạch.
- Trình duyệt thu thập dữ liệu: Một trình duyệt được lưu trữ đầy đủ cho phép bạn thu thập dữ liệu web động đồng thời tự động hóa quá trình mở khóa các trang web.
Tại Scrapless, chúng tôi chỉ truy cập dữ liệu có sẵn công khai trong khi tuân thủ nghiêm ngặt các luật, quy định và chính sách bảo mật trang web hiện hành. Nội dung trong blog này chỉ nhằm mục đích trình diễn và không liên quan đến bất kỳ hoạt động bất hợp pháp hoặc vi phạm nào. Chúng tôi không đảm bảo và từ chối mọi trách nhiệm đối với việc sử dụng thông tin từ blog này hoặc các liên kết của bên thứ ba. Trước khi tham gia vào bất kỳ hoạt động cạo nào, hãy tham khảo ý kiến cố vấn pháp lý của bạn và xem xét các điều khoản dịch vụ của trang web mục tiêu hoặc có được các quyền cần thiết.