Các Thực Hành Tốt Nhất cho Tự Động Hóa và Trích Xuất Web Sử Dụng Trình Duyệt Scrapeless Scraping

Expert Network Defense Engineer
Giới thiệu: Một Mô Hình Mới về Tự Động Hóa Trình Duyệt và Thu Thập Dữ Liệu trong Thời Đại AI
Với sự phát triển nhanh chóng của AI sinh sinh, các tác nhân AI, và các ứng dụng yêu cầu dữ liệu lớn, trình duyệt đang chuyển mình từ những “công cụ tương tác người dùng” truyền thống thành “các động cơ thực thi dữ liệu” cho các hệ thống thông minh. Trong mô hình mới này, nhiều nhiệm vụ không còn phụ thuộc vào các điểm API đơn lẻ mà thay vào đó tận dụng điều khiển trình duyệt tự động để xử lý các tương tác phức tạp trên trang, thu thập nội dung, quản lý nhiệm vụ, và truy cập bối cảnh.
Từ việc so sánh giá cả trên các trang thương mại điện tử và chụp ảnh màn hình bản đồ đến việc phân tích kết quả tìm kiếm trên các công cụ tìm kiếm và trích xuất nội dung mạng xã hội, trình duyệt đang trở thành một giao diện quan trọng cho AI truy cập dữ liệu từ thế giới thực. Tuy nhiên, độ phức tạp của cấu trúc web hiện đại, các biện pháp chống bot mạnh mẽ, và yêu cầu đồng thời cao đặt ra những thách thức kỹ thuật và vận hành đáng kể cho các giải pháp truyền thống như các phiên bản Puppeteer/Playwright cục bộ hoặc các chiến lược xoay vòng proxy.
Giới thiệu Trình Duyệt Thu Thập Không Có Rác—một nền tảng trình duyệt dựa trên đám mây tiên tiến được xây dựng cho tự động hóa quy mô lớn. Nó vượt qua các rào cản kỹ thuật chính như cơ chế chống thu thập dữ liệu, phát hiện dấu vân tay, và duy trì proxy. Hơn nữa, nó cung cấp lịch trình đồng thời gốc đám mây, mô phỏng hành vi giống như con người, và trích xuất dữ liệu có cấu trúc, tự định vị là một thành phần hạ tầng quan trọng trong thế hệ tiếp theo của các hệ thống tự động hóa và các đường dẫn dữ liệu.
Bài viết này khám phá các khả năng cốt lõi của Scrapeless và các ứng dụng thực tiễn của nó trong tự động hóa trình duyệt và thu thập dữ liệu web. Bằng cách phân tích các xu hướng ngành hiện tại và hướng phát triển trong tương lai, chúng tôi nhằm mục đích cung cấp cho các nhà phát triển, các nhà xây dựng sản phẩm và các đội ngũ dữ liệu một hướng dẫn toàn diện và có hệ thống.
I. Bối Cảnh: Tại Sao Chúng Ta Cần Trình Duyệt Thu Thập Không Có Rác?
1.1 Sự Tiến Hóa của Tự Động Hóa Trình Duyệt
Trong kỷ nguyên tự động hóa dựa trên AI, trình duyệt không còn chỉ là công cụ cho sự tương tác của con người—chúng đã trở thành các điểm thực thi thiết yếu để thu thập cả dữ liệu có cấu trúc và không có cấu trúc. Trong nhiều kịch bản thực tế, các API thường không khả dụng hoặc bị giới hạn, khiến việc mô phỏng hành vi của con người qua trình duyệt trở nên cần thiết để thu thập dữ liệu, thực hiện nhiệm vụ, và trích xuất thông tin.
Các trường hợp sử dụng phổ biến bao gồm:
- So sánh giá cả trên các trang thương mại điện tử: Dữ liệu giá cả và tồn kho thường được tải không đồng bộ trong trình duyệt.
- Phân tích các trang kết quả tìm kiếm: Nội dung cần được tải đầy đủ bằng cách cuộn và nhấp vào các phần tử trên trang.
- Các trang web đa ngôn ngữ, hệ thống kế thừa, và nền tảng intranet: Việc truy cập dữ liệu là không thể thông qua API.
Các giải pháp thu thập dữ liệu truyền thống (ví dụ: chạy Puppeteer/Playwright cục bộ hoặc thiết lập xoay vòng proxy) thường gặp khó khăn với độ ổn định kém dưới điều kiện đồng thời cao, thường xuyên bị chặn lực lượng chống bot, và chi phí bảo trì cao. Trình Duyệt Thu Thập Không Có Rác, với việc triển khai gốc đám mây và mô phỏng hành vi trình duyệt thực sự, cung cấp cho các nhà phát triển một nền tảng tự động hóa trình duyệt đáng tin cậy, có độ tin cậy cao—đóng vai trò như một hạ tầng quan trọng cho các hệ thống tự động hóa AI và các quy trình dữ liệu.
1.2 Thách Thức của Các Cơ Chế Chống Bot
Đồng thời, khi các công nghệ chống bot phát triển, các công cụ thu thập dữ liệu truyền thống ngày càng bị đánh dấu là lưu lượng bot bởi các trang web mục tiêu, dẫn đến việc cấm IP và hạn chế quyền truy cập. Các cơ chế chống thu thập dữ liệu phổ biến bao gồm:
- Dấu vân tay trình duyệt: Phát hiện các mô hình truy cập bất thường thông qua User-Agent, kết xuất canvas, bắt tay TLS, và hơn thế nữa.
- Xác minh CAPTCHA: Yêu cầu người dùng chứng minh rằng họ là con người.
- Danh sách đen IP: Chặn các IP truy cập quá thường xuyên.
- Thuật toán phân tích hành vi: Phát hiện chuyển động chuột, tốc độ cuộn, và logic tương tác không bình thường.
Trình Duyệt Thu Thập Không Có Rác vượt qua hiệu quả những thách thức này thông qua tùy chỉnh dấu vân tay trình duyệt chính xác, giải quyết CAPTCHA tích hợp sẵn, và hỗ trợ proxy linh hoạt—trở thành hạ tầng cốt lõi cho thế hệ tiếp theo của các công cụ tự động hóa.
II. Các Khả Năng Cốt Lõi của Scrapeless
Trình Duyệt Thu Thập Không Có Rác cung cấp các khả năng cốt lõi mạnh mẽ, mang đến cho người dùng các tính năng tương tác dữ liệu ổn định, hiệu quả và có thể mở rộng. Dưới đây là các mô-đun chức năng chính và chi tiết kỹ thuật của nó:
2.1 Môi Trường Trình Duyệt Thực
Scrapeless được xây dựng trên động cơ Chromium, cung cấp một môi trường trình duyệt hoàn chỉnh có khả năng mô phỏng hành vi người sử dụng thực. Các tính năng chính bao gồm:
- Giả mạo dấu vân tay TLS: Giả mạo các tham số bắt tay TLS để vượt qua các cơ chế chống bot truyền thống.
- Mờ hóa dấu vân tay động: Điều chỉnh User-Agent, độ phân giải màn hình, múi giờ, v.v., để mỗi phiên làm việc xuất hiện cực kỳ giống con người.
- Hỗ trợ địa phương hóa: Tùy chỉnh ngôn ngữ, vùng, và các cài đặt múi giờ để làm cho các tương tác với các trang web mục tiêu tự nhiên hơn.
Tùy Chỉnh Sâu Dấu Vân Tay Trình Duyệt
Scrapeless cung cấp tùy chỉnh toàn diện cho các dấu vân tay trình duyệt, cho phép người dùng tạo ra các môi trường duyệt web "thực" hơn:
- Kiểm soát User-Agent: Định nghĩa chuỗi User-Agent trong các yêu cầu HTTP của trình duyệt, bao gồm động cơ trình duyệt, phiên bản và hệ điều hành.
- Bản đồ độ phân giải màn hình: Đặt các giá trị trả về của
screen.width
vàscreen.height
để mô phỏng các kích thước màn hình phổ biến. - Khóa thuộc tính nền tảng: Chỉ định giá trị trả về của
navigator.platform
trong JavaScript để mô phỏng loại hệ điều hành. - Giả lập môi trường địa phương hóa: Hỗ trợ đầy đủ các cài đặt địa phương hóa tùy chỉnh, ảnh hưởng đến việc hiển thị nội dung, định dạng thời gian và phát hiện sở thích ngôn ngữ trên các trang web.
2.2 Triển khai Dựa trên Đám mây và Tính mở rộng
Scrapeless được triển khai hoàn toàn trên đám mây và cung cấp những lợi thế sau:
- Không cần tài nguyên cục bộ: Giảm chi phí phần cứng và cải thiện tính linh hoạt trong triển khai.
- Nút phân phối toàn cầu: Hỗ trợ các tác vụ đồng thời quy mô lớn và vượt qua các hạn chế về địa lý.
- Hỗ trợ đồng thời cao: Từ 50 đến không giới hạn các phiên đồng thời—lý tưởng cho mọi thứ từ các tác vụ nhỏ đến các quy trình tự động hóa phức tạp.
So sánh hiệu suất
So với các công cụ truyền thống như Selenium và Playwright, Scrapeless nổi bật trong các kịch bản có độ đồng thời cao. Dưới đây là bảng so sánh đơn giản:
Tính năng | Scrapeless | Selenium | Playwright |
---|---|---|---|
Hỗ trợ đồng thời | Không giới hạn (Tùy chỉnh cấp doanh nghiệp) | Hạn chế | Trung bình |
Tùy chỉnh dấu vân tay | Nâng cao | Cơ bản | Trung bình |
Giải quyết CAPTCHA | Tích hợp sẵn (Tỷ lệ thành công 98%) Hỗ trợ reCAPTCHA, Cloudflare Turnstile/Challenge, AWS WAF, DataDome, v.v. |
Phụ thuộc bên ngoài | Phụ thuộc bên ngoài |
Đồng thời, Scrapeless hoạt động tốt hơn các sản phẩm cạnh tranh khác trong các kịch bản có độ đồng thời cao. Dưới đây là tóm tắt khả năng của nó từ các khía cạnh khác nhau:
Tính năng / Nền tảng | Scrapeless | Browserless | Browserbase | HyperBrowser | Bright Data | ZenRows | Steel.dev |
---|---|---|---|---|---|---|---|
Phương thức triển khai | Dựa trên đám mây | Containers Puppeteer trên đám mây | Cụm đám mây đa trình duyệt | Nền tảng trình duyệt đầu không có giao diện | Triển khai trên đám mây | Giao diện API trình duyệt | Cụm trình duyệt + API trình duyệt |
Hỗ trợ đồng thời | Từ 50 đến Không giới hạn | 3–50 | 3–50 | 1–250 | Lên đến không giới hạn (tùy thuộc vào gói) | Lên đến 100 (gói Doanh nghiệp) | Không có dữ liệu chính thức |
Khả năng chống phát hiện | Nhận diện & vượt qua CAPTCHA miễn phí, hỗ trợ reCAPTCHA, Cloudflare Turnstile/Challenge, AWS WAF, DataDome, v.v. | Vượt qua CAPTCHA | Vượt qua CAPTCHA + Chế độ Ẩn danh | Vượt qua CAPTCHA + Chế độ Ẩn danh + Quản lý Phiên | Vượt qua CAPTCHA + Giả mạo dấu vân tay + Proxy | Dấu vân tay trình duyệt tùy chỉnh | Proxy + Nhận diện dấu vân tay |
Chi phí thời gian chạy trình duyệt | $0.063 – $0.090/giờ (bao gồm vượt qua CAPTCHA miễn phí) | $0.084 – $0.15/giờ (dựa trên đơn vị) | $0.10 – $0.198/giờ (bao gồm 2–5GB proxy miễn phí) | $30–$100/tháng | ~$0.10/giờ | ~$0.09/giờ | $0.05 – $0.08/giờ |
Chi phí proxy | $1.26 – $1.80/GB | $4.3/GB | $10/GB (vượt qua hạn ngạch miễn phí) | Dữ liệu chính thức không có | $9.5/GB (chuẩn); $12.5/GB (miền cao cấp) | $2.8 – $5.42/GB | $3 – $8.25/GB |
2.3 Cơ chế giải quyết CAPTCHA tự động và giám sát sự kiện
Scrapeless cung cấp các giải pháp CAPTCHA tiên tiến và mở rộng một loạt các chức năng tùy chỉnh thông qua Giao thức DevTools của Chrome (CDP) để nâng cao độ tin cậy của tự động hóa trình duyệt.
Khả năng giải quyết CAPTCHA
Scrapeless có thể tự động xử lý các loại CAPTCHA chính, bao gồm: reCAPTCHA, Cloudflare Turnstile/Challenge, AWS WAF, DataDome, v.v.
Cơ chế giám sát sự kiện
Scrapeless cung cấp ba sự kiện chính để giám sát quá trình giải CAPTCHA:
Tên sự kiện | Mô tả |
---|---|
Captcha.detected | Đã phát hiện CAPTCHA |
Captcha.solveFinished | Đã giải CAPTCHA |
Captcha.solveFailed | Giải CAPTCHA thất bại |
Cấu trúc dữ liệu phản hồi sự kiện
Trường | Loại | Mô tả |
---|---|---|
type | chuỗi | Loại CAPTCHA (ví dụ: recaptcha, turnstile) |
success | boolean | Kết quả việc giải |
message | chuỗi | Thông điệp trạng thái (ví dụ: "NOT_DETECTED", "SOLVE_FINISHED") |
token? | chuỗi | Mã thông báo trả về khi thành công (tùy chọn) |
2.4 Hỗ trợ proxy mạnh mẽ
Scrapeless cung cấp hệ thống tích hợp proxy linh hoạt và có thể kiểm soát, hỗ trợ nhiều chế độ proxy khác nhau:
- Proxy dân cư tích hợp sẵn: hỗ trợ proxy địa lý tại 195 quốc gia/khu vực trên toàn thế giới, ngay lập tức.
- Proxy tùy chỉnh (đăng ký cao cấp): cho phép người dùng kết nối với dịch vụ proxy của riêng mình, mà không bao gồm trong thanh toán proxy của Scrapeless.
2.5 Phát lại phiên làm việc
Phát lại phiên là một trong những tính năng mạnh mẽ nhất của Trình duyệt Scraping Scrapeless. Nó cho phép bạn phát lại phiên theo từng trang để kiểm tra các thao tác và yêu cầu mạng thực hiện.
3. Ví dụ mã: Tích hợp và sử dụng Scrapeless
3.1 Sử dụng Trình duyệt Scraping Scrapeless
Ví dụ Puppeteer
const puppeteer = require('puppeteer-core');
const connectionURL = 'wss://browser.scrapeless.com/browser?token=your-scrapeless-api-key&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();
})();
Ví dụ Playwright
const {chromium} = require('playwright-core');
const connectionURL = 'wss://browser.scrapeless.com/browser?token=your-scrapeless-api-key&session_ttl=180&proxy_country=ANY';
(async () => {
const browser = await chromium.connectOverCDP(connectionURL);
const page = await browser.newPage();
await page.goto('https://www.scrapeless.com');
console.log(await page.title());
await browser.close();
})();
3.2 Ví dụ mã tham số Fingerprint Trình duyệt Scrapeless
Dưới đây là một ví dụ mã đơn giản cho thấy cách tích hợp chức năng tùy chỉnh fingerprint của trình duyệt Scrapeless thông qua Puppeteer và Playwright:
Ví dụ Puppeteer
const puppeteer = require('puppeteer-core');
// fingerprint trình duyệt tùy chỉnh
const fingerprint = {
userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.1.2.3 Safari/537.36',
platform: 'Windows',
screen: {
width: 1280, height: 1024
},
localization: {
languages: ['zh-HK', 'en-US', 'en'], timezone: 'Asia/Hong_Kong',
}
}
const query = new URLSearchParams({
token: 'APIKey', // bắt buộc
session_ttl: 180,
proxy_country: 'ANY',
fingerprint: encodeURIComponent(JSON.stringify(fingerprint)),
});
const connectionURL = `wss://browser.scrapeless.com/browser?${query.toString()}`;
(async () => {
const browser = await puppeteer.connect({browserWSEndpoint: connectionURL});
const page = await browser.newPage();
await page.goto('https://www.scrapeless.com');
const info = await page.evaluate(() => {
return {
screen: {
width: screen.width,
height: screen.height,
},
userAgent: navigator.userAgent,
timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone,
languages: navigator.languages
};
});
console.log(info);
await browser.close();
})();
Ví dụ Playwright
const { chromium } = require('playwright-core');
// fingerprint trình duyệt tùy chỉnh
const fingerprint = {
userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.1.2.3 Safari/537.36',
platform: 'Windows',
screen: {
width: 1280, height: 1024
},
localization: {
languages: ['zh-HK', 'en-US', 'en'], timezone: 'Asia/Hong_Kong',
}
}
const query = new URLSearchParams({
token: 'APIKey', // bắt buộc
session_ttl: 180,
proxy_country: 'ANY',
fingerprint: encodeURIComponent(JSON.stringify(fingerprint)),
});
const connectionURL = `wss://browser.scrapeless.com/browser?${query.toString()}`;
(async () => {
const browser = await chromium.connectOverCDP(connectionURL);
javascript
const page = await browser.newPage();
await page.goto('https://www.scrapeless.com');
const info = await page.evaluate(() => {
return {
screen: {
width: screen.width,
height: screen.height,
},
userAgent: navigator.userAgent,
timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone,
languages: navigator.languages
};
});
console.log(info);
await browser.close();
})();
### 3.3 Ví dụ về giám sát sự kiện CAPTCHA
Dưới đây là một ví dụ mã hoàn chỉnh về việc sử dụng Scrapeless để giám sát các sự kiện CAPTCHA, cho thấy cách giám sát trạng thái giải quyết CAPTCHA theo thời gian thực:
// Lắng nghe các sự kiện giải quyết CAPTCHA
const client = await page.createCDPSession();
client.on('Captcha.detected', (result) => {
console.log('Phát hiện CAPTCHA:', result);
});
await new Promise((resolve, reject) => {
client.on('Captcha.solveFinished', (result) => {
if (result.success) resolve();
});
client.on('Captcha.solveFailed', () =>
reject(new Error('Giải CAPTCHA không thành công'))
);
setTimeout(() =>
reject(new Error('Hết thời gian giải CAPTCHA')),
5 * 60 * 1000
);
});
Sau khi nắm vững các tính năng cốt lõi và lợi thế của Trình duyệt Scrapeless Scraping, chúng ta không chỉ hiểu rõ hơn về giá trị của nó trong việc thu thập thông tin trên web hiện đại mà còn có thể tận dụng những ưu điểm về hiệu suất một cách hiệu quả hơn. Để giúp các nhà phát triển tự động hóa và thu thập dữ liệu trên các trang web một cách hiệu quả và an toàn hơn, chúng ta sẽ khám phá cách áp dụng Trình duyệt Scrapeless Scraping trong các trường hợp sử dụng cụ thể, dựa trên các kịch bản phổ biến.
## 4. Thực hành tốt nhất cho Tự động hóa và Thu thập Dữ liệu Web Sử dụng Trình duyệt Scrapeless Scraping
> **Tuyên bố từ chối trách nhiệm pháp lý và Các biện pháp phòng ngừa**
> Hướng dẫn này bao gồm các kỹ thuật thu thập dữ liệu web phổ biến cho mục đích giáo dục. Tương tác với các máy chủ công cộng yêu cầu sự cẩn thận và tôn trọng và đây là một tóm tắt tốt về những điều không nên làm:
> - Không thu thập dữ liệu với tốc độ có thể gây hại cho trang web.
> - Không thu thập dữ liệu không có sẵn công khai.
> - Không lưu trữ thông tin cá nhân của công dân EU được bảo vệ bởi GDPR.
> - Không sử dụng lại toàn bộ dữ liệu công khai, điều này có thể là bất hợp pháp ở một số quốc gia.
### Hiểu biết về Bảo vệ Cloudflare
---
1. **Cloudflare là gì?**
Cloudflare là một nền tảng đám mây tích hợp mạng phân phối nội dung (CDN), tăng tốc DNS và bảo vệ an ninh. Các trang web sử dụng Cloudflare để giảm thiểu các cuộc tấn công Từ chối dịch vụ phân tán (DDoS) (tức là, các trang web bị gián đoạn do nhiều yêu cầu truy cập) và đảm bảo rằng các trang web sử dụng nó luôn hoạt động.
Dưới đây là một ví dụ đơn giản để hiểu cách Cloudflare hoạt động:
Khi bạn truy cập một trang web có Cloudflare được kích hoạt (như example.com), yêu cầu của bạn trước tiên sẽ đến máy chủ biên của Cloudflare, không phải máy chủ gốc. Cloudflare sẽ sau đó xác định xem có cho phép yêu cầu của bạn tiếp tục dựa trên một số quy tắc, chẳng hạn như:
- Có thể trả lại trang đã được lưu vào bộ nhớ cache hay không;
- Bạn có cần vượt qua bài kiểm tra CAPTCHA không;
- Yêu cầu của bạn có bị chặn không;
- Yêu cầu có được chuyển tiếp đến máy chủ website thực (gốc) không.
Nếu bạn được xác định là người dùng hợp pháp, Cloudflare sẽ chuyển tiếp yêu cầu đến máy chủ gốc và trả lại nội dung cho bạn. Cơ chế này làm tăng cường bảo mật cho trang web nhưng cũng đặt ra những thách thức đáng kể đối với việc truy cập tự động.
Vượt qua Cloudflare là một trong những thách thức kỹ thuật khó khăn nhất trong nhiều nhiệm vụ thu thập dữ liệu. Dưới đây, chúng ta sẽ đi sâu hơn vào lý do tại sao việc vượt qua Cloudflare lại khó khăn.
2. **Những thách thức trong việc Vượt qua Bảo vệ Cloudflare**
Vượt qua Cloudflare không dễ dàng, đặc biệt khi các tính năng chống bot nâng cao (như Quản lý Bot, Thử thách Quản lý, Xác minh Turnstile, các thử thách JS, v.v.) được kích hoạt. Nhiều công cụ thu thập dữ liệu truyền thống (như Selenium và Puppeteer) thường bị phát hiện và chặn trước khi yêu cầu được thực hiện do các đặc điểm dấu vân tay rõ rệt hoặc mô phỏng hành vi không tự nhiên.
Mặc dù có một số công cụ nguồn mở được thiết kế đặc biệt để vượt qua Cloudflare (như FlareSolverr, undetected-chromedriver), những công cụ này thường có tuổi thọ ngắn. Khi chúng được sử dụng rộng rãi, Cloudflare sẽ nhanh chóng cập nhật các quy tắc phát hiện của mình để chặn chúng. Điều này có nghĩa là để vượt qua các cơ chế bảo vệ của Cloudflare một cách bền vững và ổn định, các đội thường cần khả năng phát triển nội bộ và đầu tư tài nguyên liên tục cho bảo trì và cập nhật.
Dưới đây là những thách thức chính trong việc vượt qua bảo vệ Cloudflare:
- **Nhận diện Dấu vân tay Trình duyệt Cực kì Nghiêm ngặt**: Cloudflare phát hiện các đặc điểm dấu vân tay trong các yêu cầu như User-Agent, cài đặt ngôn ngữ, độ phân giải màn hình, múi giờ, và việc kết xuất Canvas/WebGL. Nếu nó phát hiện ra trình duyệt bất thường hoặc hành vi tự động, nó sẽ chặn yêu cầu.
- **Cơ chế Thách thức JS Phức tạp**: Cloudflare tạo ra các thách thức JavaScript một cách động (như CAPTCHA, chuyển hướng chậm, tính toán logic, v.v.), và các kịch bản tự động thường gặp khó khăn trong việc phân tích hoặc thực thi chính xác các logic phức tạp này.
- **Hệ thống Phân tích Hành vi**: Ngoài các dấu vân tay tĩnh, Cloudflare cũng phân tích quỹ đạo hành vi của người dùng, chẳng hạn như chuyển động chuột, thời gian lưu trú trên trang, hành động cuộn, v.v. Điều này yêu cầu độ chính xác cao trong việc mô phỏng hành vi của con người.
- **Kiểm soát Tốc độ và Độ đồng thời**: Truy cập tần suất cao có thể dễ dàng kích hoạt các chiến lược giới hạn tốc độ và chặn IP của Cloudflare. Các nhóm proxy và lập lịch phân tán phải được tối ưu hóa cao.
- **Xác thực Bên máy chủ Không thể thấy**: Vì Cloudflare là một bộ chặn ở biên, nhiều yêu cầu thực tế bị chặn trước khi đến máy chủ gốc, khiến các phương pháp phân tích gói truyền thống trở nên không hiệu quả.
Do đó, việc vượt qua Cloudflare thành công đòi hỏi phải mô phỏng hành vi của trình duyệt thực, thực thi JavaScript một cách động, cấu hình dấu vân tay một cách linh hoạt và sử dụng các proxy chất lượng cao cùng cơ chế lập lịch động.
## Vượt qua Cloudflare của Idealista bằng Trình duyệt Thu thập Dữ liệu Không có Rắc rối để Thu thập Dữ liệu Bất động sản
---
Trong chương này, chúng tôi sẽ trình bày cách sử dụng Trình duyệt Thu thập Dữ liệu Không có Rắc rối để xây dựng một hệ thống tự động thu thập dữ liệu bất động sản từ Idealista, một nền tảng bất động sản hàng đầu châu Âu, một cách hiệu quả, ổn định và chống lại các biện pháp chống thu thập. Idealista áp dụng nhiều cơ chế bảo vệ, bao gồm Cloudflare, tải động, giới hạn tốc độ IP, và nhận dạng hành vi người dùng, khiến nó trở thành một nền tảng mục tiêu rất thách thức.
Chúng tôi sẽ tập trung vào các khía cạnh kỹ thuật sau:
- Vượt qua các trang xác minh Cloudflare
- Tạo dấu vân tay tùy chỉnh và mô phỏng hành vi người dùng thực
- Sử dụng Phát lại Phiên
- Thu thập với độ đồng thời cao sử dụng nhiều nhóm proxy
- Tối ưu hóa chi phí
### Hiểu Thách thức: Bảo vệ Cloudflare của Idealista
Idealista là một nền tảng bất động sản trực tuyến hàng đầu tại Nam Âu, cung cấp hàng triệu danh sách cho các loại bất động sản khác nhau, bao gồm nhà ở, căn hộ và phòng chia sẻ. Do giá trị thương mại cao của dữ liệu bất động sản, nền tảng này đã thực hiện các biện pháp chống thu thập nghiêm ngặt.
Để chống lại việc thu thập tự động, Idealista đã triển khai Cloudflare — một hệ thống bảo vệ an ninh và chống bot được sử dụng rộng rãi, được thiết kế để bảo vệ chống lại các bot độc hại, các cuộc tấn công DDoS và lạm dụng dữ liệu. Các cơ chế chống thu thập của Cloudflare chủ yếu bao gồm các yếu tố sau:
- **Cơ chế Xác minh Truy cập**: Bao gồm Thách thức JS, kiểm tra tính toàn vẹn của trình duyệt, và xác minh CAPTCHA, để xác định xem người truy cập có phải là người dùng thực hay không.
- **Phân tích Hành vi**: Phát hiện người dùng thực thông qua các hành động như chuyển động chuột, mẫu nhấp chuột, và tốc độ cuộn.
- **Phân tích Header HTTP**: Kiểm tra loại trình duyệt, cài đặt ngôn ngữ, và dữ liệu người giới thiệu để kiểm tra sự không nhất quán. Các tiêu đề nghi ngờ có thể tiết lộ nỗ lực che giấu bot tự động.
- **Phát hiện và Chặn Dấu vân tay**: Nhận diện lưu lượng do các công cụ tự động (như Selenium và Puppeteer) tạo ra thông qua dấu vân tay của trình duyệt, dấu vân tay TLS, và thông tin tiêu đề.
- **Lọc Node Biên**: Các yêu cầu đầu tiên sẽ vào mạng lưới biên toàn cầu của Cloudflare, nơi đánh giá rủi ro của chúng. Chỉ những yêu cầu được coi là rủi ro thấp mới được chuyển tiếp đến các máy chủ gốc của Idealista.
Tiếp theo, chúng tôi sẽ giải thích chi tiết cách sử dụng Trình duyệt Thu thập Dữ liệu Không có Rắc rối để vượt qua bảo vệ Cloudflare của Idealista và thu thập thành công dữ liệu bất động sản.
### Vượt qua Cloudflare của Idealista bằng Trình duyệt Thu thập Dữ liệu Không có Rắc rối
---
#### Các yêu cầu cần có
Trước khi bắt đầu, hãy đảm bảo rằng bạn đã có những công cụ cần thiết:
- **Python**: Nếu bạn chưa cài đặt Python, hãy tải phiên bản mới nhất và cài đặt nó trên hệ thống của bạn.
- **Thư viện Cần Thiết**: Bạn cần cài đặt một số thư viện Python. Mở một terminal hoặc command prompt và chạy lệnh sau:
pip install requests beautifulsoup4 lxml selenium selenium-wire undetected-chromedriver
- **ChromeDriver**: Tải [ChromeDriver](https://developer.chrome.com/docs/chromedriver/downloads). Đảm bảo chọn phiên bản tương ứng với phiên bản Chrome bạn đã cài đặt.
- **Tài khoản Scrapeless**: Để vượt qua bảo vệ bot của Idealista, bạn sẽ cần một tài khoản Trình duyệt Thu thập Dữ liệu Không có Rắc rối. Bạn có thể [đăng ký tại đây](https://app.scrapeless.com/passport/login?utm_source=official&utm_medium=blog&utm_campaign=scrapingbrowser) và nhận một thử nghiệm miễn phí trị giá 2 USD.
#### Xác định Dữ liệu
Mục tiêu của chúng tôi là thu thập thông tin chi tiết về mỗi danh sách bất động sản trên Idealista. Chúng tôi có thể sử dụng công cụ phát triển của trình duyệt để hiểu cấu trúc của trang web và xác định các phần tử HTML mà chúng tôi cần tập trung vào.
Nhấp chuột phải vào bất kỳ đâu trên trang và chọn **Kiểm tra** để xem mã nguồn của trang.
Trong bài viết này, chúng tôi sẽ tập trung vào việc thu thập danh sách bất động sản từ Alcala de Henares, Madrid bằng cách sử dụng URL sau:
https://www.idealista.com/venta-viviendas/alcala-de-henares-madrid/
Chúng tôi muốn trích xuất các điểm dữ liệu sau từ mỗi danh sách:
- Tiêu đề
- Giá
- Thông tin diện tích
- Mô tả bất động sản
- URL hình ảnh
Dưới đây, bạn có thể thấy trang danh sách bất động sản với các chú thích cho biết thông tin của mỗi bất động sản nằm ở đâu.
Bằng cách kiểm tra mã nguồn HTML, chúng tôi có thể xác định bộ chọn CSS cho mỗi điểm dữ liệu. Các bộ chọn CSS là các mẫu được sử dụng để chọn các phần tử trong tài liệu HTML.
Bằng cách kiểm tra mã nguồn HTML, chúng tôi phát hiện rằng mỗi danh sách bất động sản được chứa trong thẻ `<article>` với lớp `item`. Trong mỗi mục:
- Tiêu đề nằm trong thẻ `<a>` với lớp `item-link`.
- Giá nằm trong thẻ `<span>` với lớp `item-price`.
- Và các điểm dữ liệu khác tương tự.
### Bước 1: Cài đặt Selenium với ChromeDriver
Trước tiên, chúng tôi cần cấu hình Selenium để sử dụng ChromeDriver. Bắt đầu bằng cách thiết lập `chrome_options` và khởi tạo ChromeDriver.
from seleniumwire import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup
import time
from datetime import datetime
import json
def listings(url):
chrome_options = Options()
chrome_options.add_argument("--headless")
s = Service("Thay thế bằng đường dẫn tới ChromeDriver của bạn")
driver = webdriver.Chrome(service=s, chrome_options=chrome_options)
Mã này nhập các mô-đun cần thiết, bao gồm `seleniumwire` để tương tác với trình duyệt nâng cao và `BeautifulSoup` để phân tích HTML.
Chúng tôi định nghĩa một hàm `listings(url)` và cấu hình Chrome để chạy ở chế độ headless bằng cách thêm tham số `--headless` vào `chrome_options`. Sau đó, chúng tôi khởi tạo ChromeDriver bằng cách sử dụng đường dẫn dịch vụ đã chỉ định.
### Bước 2: Tải URL mục tiêu
Tiếp theo, chúng tôi tải URL mục tiêu và chờ trang tải hoàn tất.
driver.get(url)
time.sleep(8) # Điều chỉnh tùy theo thời gian tải trang web
Tại đây, lệnh `driver.get(url)` chỉ thị trình duyệt điều hướng đến URL đã chỉ định.
Chúng tôi sử dụng `time.sleep(8)` để tạm dừng kịch bản trong 8 giây, cho phép đủ thời gian để trang web tải hoàn toàn. Thời gian chờ này có thể được điều chỉnh tùy theo tốc độ tải của trang web.
### Bước 3: Phân tích nội dung trang
Khi trang đã tải, chúng tôi sử dụng BeautifulSoup để phân tích nội dung của nó:
soup = BeautifulSoup(driver.page_source, "lxml")
driver.quit()
Tại đây, chúng tôi sử dụng `driver.page_source` để lấy nội dung HTML của trang đã tải, và phân tích nó bằng BeautifulSoup với bộ phân tích `lxml`. Cuối cùng, chúng tôi gọi `driver.quit()` để đóng phiên trình duyệt và dọn dẹp tài nguyên.
### Bước 4: Trích xuất dữ liệu từ HTML đã phân tích
Tiếp theo, chúng tôi trích xuất dữ liệu liên quan từ HTML đã phân tích.
house_listings = soup.find_all("article", class_="item")
extracted_data = []
for listing in house_listings:
description_elem = listing.find("div", class_="item-description")
description_text = description_elem.get_text(strip=True) if description_elem else "nil"
item_details = listing.find_all("span", class_="item-detail")
bedrooms = item_details[0].get_text(strip=True) if len(item_details) > 0 else "nil"
area = item_details[1].get_text(strip=True) if len(item_details) > 1 else "nil"
image_urls = [img["src"] for img in listing.find_all("img") if img.get("src")]
first_image_url = image_urls[0] if image_urls else "nil"
listing_info = {
"Tiêu đề": listing.find("a", class_="item-link").get("title", "nil"),
"Giá": listing.find("span", class_="item-price").get_text(strip=True),
"Phòng ngủ": bedrooms,
"Diện tích": area,
"Mô tả": description_text,
"URL hình ảnh": first_image_url,
}
extracted_data.append(listing_info)
Tại đây, chúng tôi tìm tất cả các phần tử khớp với thẻ `article` có tên lớp `item`, đại diện cho các danh sách bất động sản riêng lẻ. Đối với mỗi danh sách, chúng tôi trích xuất tiêu đề của nó, các chi tiết (chẳng hạn như số phòng ngủ và diện tích), và URL hình ảnh. Chúng tôi lưu trữ các chi tiết này trong một từ điển và thêm từng từ điển vào một danh sách gọi là `extracted_data`.
### Bước 5: Lưu dữ liệu đã trích xuất
Cuối cùng, chúng tôi lưu dữ liệu đã trích xuất vào một tệp JSON.
current_datetime = datetime.now().strftime("%Y%m%d%H%M%S")
json_filename = f"dữ liệu_mới_revised_{current_datetime}.json"
with open(json_filename, "w", encoding="utf-8") as json_file:
python
json.dump(extracted_data, json_file, ensure_ascii=False, indent=2)
print(f"Dữ liệu đã trích xuất được lưu vào {json_filename}")
url = "https://www.idealista.com/venta-viviendas/alcala-de-henares-madrid/"
idealista_listings = listings(url)
Ở đây là mã hoàn chỉnh:
from seleniumwire import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup
import time
from datetime import datetime
import json
def listings(url):
chrome_options = Options()
chrome_options.add_argument("--headless")
s = Service("Thay thế bằng đường dẫn của bạn đến ChromeDriver")
driver = webdriver.Chrome(service=s, chrome_options=chrome_options)
driver.get(url)
time.sleep(8) # Điều chỉnh dựa trên thời gian tải trang web
soup = BeautifulSoup(driver.page_source, "lxml")
driver.quit()
house_listings = soup.find_all("article", class_="item")
extracted_data = []
for listing in house_listings:
description_elem = listing.find("div", class_="item-description")
description_text = description_elem.get_text(strip=True) if description_elem else "nil"
item_details = listing.find_all("span", class_="item-detail")
bedrooms = item_details[0].get_text(strip=True) if len(item_details) > 0 else "nil"
area = item_details[1].get_text(strip=True) if len(item_details) > 1 else "nil"
image_urls = [img["src"] for img in listing.find_all("img") if img.get("src")]
first_image_url = image_urls[0] if image_urls else "nil"
listing_info = {
"Tiêu đề": listing.find("a", class_="item-link").get("title", "nil"),
"Giá": listing.find("span", class_="item-price").get_text(strip=True),
"Phòng ngủ": bedrooms,
"Diện tích": area,
"Mô tả": description_text,
"URL hình ảnh": first_image_url,
}
extracted_data.append(listing_info)
current_datetime = datetime.now().strftime("%Y%m%d%H%M%S")
json_filename = f"dữ_liệu_mới_revised_{current_datetime}.json"
with open(json_filename, "w", encoding="utf-8") as json_file:
json.dump(extracted_data, json_file, ensure_ascii=False, indent=2)
print(f"Dữ liệu đã trích xuất được lưu vào {json_filename}")
url = "https://www.idealista.com/venta-viviendas/alcala-de-henares-madrid/"
idealista_listings = listings(url)
Bỏ qua phát hiện bot
Nếu bạn đã chạy tập lệnh ít nhất hai lần trong suốt hướng dẫn này, bạn có thể đã nhận thấy rằng một trang CAPTCHA xuất hiện.
Trang thách thức Cloudflare ban đầu tải tập lệnh cf-chl-bypass
và thực hiện các phép tính JavaScript, thường mất khoảng 5 giây.
Scrapeless cung cấp một cách đơn giản và đáng tin cậy để truy cập dữ liệu từ các trang như Idealista mà không cần phải xây dựng và duy trì cơ sở hạ tầng quét riêng của bạn. Trình duyệt quét Scrapeless là một giải pháp tự động hóa có độ đồng thời cao được xây dựng cho AI. Nó là một nền tảng trình duyệt hiệu suất cao, tiết kiệm chi phí, chống chặn được thiết kế cho việc quét dữ liệu quy mô lớn và mô phỏng hành vi giống như con người. Nó có thể xử lý reCAPTCHA, Cloudflare Turnstile/Challenge, AWS WAF, DataDome, và nhiều hơn nữa trong thời gian thực, làm cho nó trở thành một giải pháp quét web hiệu quả.
Dưới đây là các bước để bỏ qua sự bảo vệ của Cloudflare bằng Scrapeless:
Bước 1: Chuẩn bị
1.1 Tạo thư mục dự án
- Tạo một thư mục mới cho dự án của bạn, ví dụ,
scrapeless-bypass
. - Điều hướng đến thư mục trong terminal của bạn:
cd path/to/scrapeless-bypass
1.2 Khởi tạo dự án Node.js
Chạy lệnh sau để tạo tệp package.json:
npm init -y
1.3 Cài đặt các phụ thuộc cần thiết
Cài đặt Puppeteer-core, cho phép kết nối từ xa đến phiên bản trình duyệt:
npm install puppeteer-core
Nếu Puppeteer chưa được cài đặt trên hệ thống của bạn, hãy cài đặt phiên bản đầy đủ:
npm install puppeteer puppeteer-core
Bước 2: Lấy khóa API Scrapeless của bạn
2.1 Đăng ký trên Scrapeless
- Truy cập Scrapeless và tạo một tài khoản.
- Điều hướng đến phần Quản lý khóa API.
- Tạo một khóa API mới và sao chép nó.

Bước 3: Kết nối với Scrapeless Browserless
3.1 Lấy URL kết nối WebSocket
Scrapeless cung cấp cho Puppeteer một URL kết nối WebSocket để tương tác với trình duyệt dựa trên đám mây.
Định dạng là:
wss://browser.scrapeless.com/browser?token=APIKey&session_ttl=180&proxy_country=ANY
Thay thế APIKey bằng khóa API Scrapeless thực tế của bạn.
3.2 Cấu hình các tham số kết nối
token
: Khóa API Scrapeless của bạnsession_ttl
: Thời gian phiên trình duyệt (tính bằng giây), ví dụ,180
proxy_country
: Mã quốc gia của máy chủ proxy (ví dụ,GB
cho Vương quốc Anh,US
cho Hoa Kỳ)
#### Bước 4: Viết Script Puppeteer
##### 4.1 Tạo Tệp Script
Trong thư mục dự án của bạn, tạo một tệp JavaScript mới có tên là `bypass-cloudflare.js`.
##### 4.2 Kết nối với Scrapeless và Khởi động Puppeteer
Thêm mã sau vào `bypass-cloudflare.js`:
import puppeteer from 'puppeteer-core';
const API_KEY = 'your_api_key'; // Thay thế bằng API Key thực của bạn
const host = 'wss://browser.scrapeless.com';
const query = new URLSearchParams({token: API_KEY,session_ttl: '180', // Thời gian phiên trình duyệt tính bằng giây
proxy_country: 'GB', // Mã quốc gia proxy
proxy_session_id: 'test_session', // ID phiên proxy (giữ IP không đổi)
proxy_session_duration: '5' // Thời gian phiên proxy tính bằng phút
}).toString();
const connectionURL = ${host}/browser?${query}
;
const browser = await puppeteer.connect({browserWSEndpoint: connectionURL,defaultViewport: null,
});
console.log('Kết nối với Scrapeless');
##### 4.3 Mở một trang web và vượt qua Cloudflare
Mở rộng script để mở một trang mới và điều hướng đến một trang web được bảo vệ bởi Cloudflare:
const page = await browser.newPage();
await page.goto('https://www.scrapingcourse.com/cloudflare-challenge', { waitUntil: 'domcontentloaded' });
##### 4.4 Chờ các phần tử trang tải
Đảm bảo rằng bảo vệ Cloudflare đã bị vượt qua trước khi tiến hành:
await page.waitForSelector('main.page-content .challenge-info', { timeout: 30000 }); // Điều chỉnh selector nếu cần
##### 4.5 Chụp màn hình
Để xác minh xem bảo vệ Cloudflare đã bị vượt qua thành công hay chưa, hãy chụp màn hình trang:
await page.screenshot({ path: 'challenge-bypass.png' });
console.log('Chụp màn hình đã được lưu dưới dạng challenge-bypass.png');
##### 4.6 Script hoàn chỉnh
Dưới đây là script hoàn chỉnh:
import puppeteer from 'puppeteer-core';
const API_KEY = 'your_api_key'; // Thay thế bằng API Key thực của bạn
const host = 'wss://browser.scrapeless.com';
const query = new URLSearchParams({
token: API_KEY,
session_ttl: '180',
proxy_country: 'GB',
proxy_session_id: 'test_session',
proxy_session_duration: '5'
}).toString();
const connectionURL = ${host}/browser?${query}
;
(async () => {
try {
// Kết nối với Scrapeless
const browser = await puppeteer.connect({
browserWSEndpoint: connectionURL,
defaultViewport: null,
});
console.log('Kết nối với Scrapeless');
// Mở một trang mới và điều hướng đến trang web mục tiêu
const page = await browser.newPage();
await page.goto('https://www.scrapingcourse.com/cloudflare-challenge', { waitUntil: 'domcontentloaded' });
// Chờ trang tải hoàn toàn
await page.waitForTimeout(5000); // Điều chỉnh độ trễ nếu cần
await page.waitForSelector('main.page-content', { timeout: 30000 });
// Chụp màn hình
await page.screenshot({ path: 'challenge-bypass.png' });
console.log('Chụp màn hình đã được lưu dưới dạng challenge-bypass.png');
// Đóng trình duyệt
await browser.close();
console.log('Trình duyệt đã đóng');
} catch (error) {
console.error('Lỗi:', error);
}
})();
#### Bước 5: Chạy script
##### 5.1 Lưu script
Đảm bảo rằng script được lưu dưới dạng bypass-cloudflare.js.
##### 5.2 Thực thi script
Chạy script bằng Node.js:
node bypass-cloudflare.js
##### 5.3 Kết quả mong đợi
Nếu mọi thứ được thiết lập đúng, terminal sẽ hiển thị:
Kết nối với Scrapeless
Chụp màn hình đã được lưu dưới dạng challenge-bypass.png
Trình duyệt đã đóng
Tệp challenge-bypass.png sẽ xuất hiện trong thư mục dự án của bạn, xác nhận rằng bảo vệ Cloudflare đã được vượt qua thành công.
Bạn cũng có thể tích hợp Scrapeless Scraping Browser trực tiếp vào mã scraping của mình:
const puppeteer = require('puppeteer-core');
const connectionURL = 'wss://browser.scrapeless.com/browser?token=C4778985476352D77C08ECB031AF0857&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();
})();
### Tùy chỉnh Dấu vân tay
Khi scraping dữ liệu từ các trang web—đặc biệt là các nền tảng bất động sản lớn như **Idealista**—ngay cả khi bạn vượt qua thành công các thử thách của **Cloudflare** thông qua **Scrapeless**, bạn vẫn có thể bị đánh dấu là bot do truy cập lặp đi lặp lại hoặc với khối lượng lớn.
Các trang web thường sử dụng **dấu vân tay trình duyệt** để phát hiện hành vi tự động và hạn chế quyền truy cập.
---
#### ⚠️ Các vấn đề thường gặp bạn có thể gặp phải
- **Thời gian phản hồi chậm sau nhiều lần scraping**
Trang web có thể giảm tốc độ yêu cầu dựa trên IP hoặc mô hình hành vi.
- **Bố cục trang không thể hiển thị**
Nội dung động có thể phụ thuộc vào môi trường trình duyệt thực, dẫn đến dữ liệu bị thiếu hoặc bị hỏng trong quá trình scraping.
- **Thiếu danh sách ở một số khu vực nhất định**
Các trang web có thể chặn hoặc ẩn nội dung dựa trên mô hình lưu lượng nghi ngờ.
Các vấn đề này thường do cấu hình trình duyệt giống nhau cho mỗi yêu cầu gây ra. Nếu dấu vân tay trình duyệt của bạn không thay đổi, các hệ thống chống bot dễ dàng phát hiện ra hành vi tự động.
---
#### Giải pháp: Tùy chỉnh dấu vân tay với Scrapeless
**Trình duyệt Scrapeless Scraping** cung cấp hỗ trợ tùy chỉnh dấu vân tay tích hợp để bắt chước hành vi của người dùng thực và tránh bị phát hiện.
Bạn có thể **ngẫu nhiên hóa hoặc tùy chỉnh** các yếu tố dấu vân tay sau:
| Yếu tố Dấu Vân Tay | Mô tả |
|---------------------------|---------------------------------------------|
| **User-Agent** | Bắt chước các kết hợp hệ điều hành/trình duyệt khác nhau (ví dụ: Chrome trên Windows/Mac). |
| **Nền tảng** | Giả lập các hệ điều hành khác nhau (Windows, macOS, v.v.). |
| **Kích thước Màn hình** | Giả lập các độ phân giải thiết bị khác nhau để tránh sự không tương thích giữa di động/máy tính để bàn. |
| **Địa phương hóa** | Căn chỉnh ngôn ngữ và múi giờ với thông tin định vị địa lý để tính nhất quán. |
---
Bằng cách xoay vòng hoặc tùy chỉnh các giá trị này, mỗi yêu cầu trông tự nhiên hơn—giảm thiểu nguy cơ bị phát hiện và cải thiện độ tin cậy của việc trích xuất dữ liệu.
**Ví dụ mã:**
const puppeteer = require('puppeteer-core');
const query = new URLSearchParams({
token: 'your-scrapeless-api-key', // cần thiết
session_ttl: 180,
proxy_country: 'ANY',
// Đặt tham số dấu vân tay
userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.6998.45 Safari/537.36',
platform: 'Windows',
screen: JSON.stringify({ width: 1280, height: 1024 }),
localization: JSON.stringify({
locale: 'zh-HK',
languages: ['zh-HK', 'en-US', 'en'],
timezone: 'Asia/Hong_Kong',
})
});
const connectionURL = wss://browser.Scrapeless.com/browser?${query.toString()}
;
(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();
})();
### Phát lại Phiên
Sau khi tùy chỉnh dấu vân tay trình duyệt, sự ổn định của trang cải thiện đáng kể, và việc trích xuất nội dung trở nên đáng tin cậy hơn.
Tuy nhiên, trong các hoạt động quét quy mô lớn, các vấn đề bất ngờ vẫn có thể gây ra lỗi trích xuất. Để giải quyết điều này, **Scrapeless** cung cấp một tính năng **Phát lại Phiên** mạnh mẽ.
---
#### Phát lại Phiên là gì?
Phát lại Phiên ghi lại toàn bộ phiên trình duyệt một cách chi tiết, ghi lại tất cả các tương tác, chẳng hạn như:
- Quy trình tải trang
- Dữ liệu yêu cầu và phản hồi mạng
- Hành vi thực thi JavaScript
- Nội dung được tải động nhưng chưa được phân tích
---
#### Tại sao sử dụng Phát lại Phiên?
Khi quét các trang web phức tạp như **Idealista**, Phát lại Phiên có thể cải thiện hiệu quả gỡ lỗi đáng kể.
| Lợi ích | Mô tả |
|----------------------------|-----------------------------------------------------------------------------|
| **Theo dõi sự cố chính xác** | Nhanh chóng xác định các yêu cầu không thành công mà không cần đoán định |
| **Không cần chạy lại mã** | Phân tích các vấn đề trực tiếp từ phát lại thay vì chạy lại trình quét |
| **Cải thiện hợp tác** | Chia sẻ nhật ký phát lại với các thành viên trong nhóm để dễ dàng xử lý sự cố |
| **Phân tích nội dung động** | Hiểu cách dữ liệu được tải động cư xử trong quá trình quét |
---
#### Mẹo sử dụng
Khi **Phát lại Phiên** được kích hoạt, hãy kiểm tra nhật ký phát lại đầu tiên bất cứ khi nào một lần quét thất bại hoặc dữ liệu có vẻ không đầy đủ. Điều này giúp bạn chẩn đoán sự cố nhanh hơn và giảm thời gian gỡ lỗi.
### Cấu hình Proxy
Khi quét Idealista, điều quan trọng cần lưu ý là nền tảng này rất nhạy cảm với địa chỉ IP không địa phương—đặc biệt là khi truy cập vào các danh sách từ các thành phố cụ thể. Nếu IP của bạn xuất phát từ bên ngoài đất nước, Idealista có thể:
- Chặn hoàn toàn yêu cầu
- Trả về một phiên bản đơn giản hóa hoặc cắt bớt của trang
- Cung cấp dữ liệu trống hoặc không đầy đủ, ngay cả khi không kích hoạt CAPTCHA
---
#### Hỗ trợ Proxy Tích Hợp của Scrapeless
Scrapeless cung cấp **cấu hình proxy tích hợp**, cho phép bạn chỉ định nguồn địa lý của mình trực tiếp.
Bạn có thể cấu hình điều này bằng cách sử dụng:
- `proxy_country`: Một mã quốc gia hai ký tự (ví dụ: `'ES'` cho Tây Ban Nha)
- `proxy_url`: URL máy chủ proxy của riêng bạn
Ví dụ sử dụng:
proxy_country: 'ES',
### Tính Toán Cao
Trang mà chúng tôi vừa quét từ Idealista—[Danh sách Bất động sản Alcalá de Henares](https://www.idealista.com/venta-viviendas/alcala-de-henares-madrid/)—có tới 6 trang danh sách.
Khi bạn đang nghiên cứu xu hướng ngành hoặc thu thập các chiến lược tiếp thị cạnh tranh, bạn có thể cần quét dữ liệu bất động sản từ **20+ thành phố mỗi ngày**, bao phủ **hàng nghìn trang**. Trong một số trường hợp, bạn thậm chí có thể cần làm mới dữ liệu này mỗi giờ.

#### Yêu cầu về Tính đồng thời cao
Để xử lý khối lượng này một cách hiệu quả, hãy xem xét các yêu cầu sau:
- **Nhiều kết nối đồng thời**: Để thu thập dữ liệu từ hàng trăm trang mà không phải chờ lâu.
- **Công cụ tự động hóa**: Sử dụng Scrapeless Scraping Browser hoặc các công cụ tương tự có thể xử lý các yêu cầu đồng thời ở quy mô lớn.
- **Quản lý phiên**: Duy trì các phiên liên tục để tránh CAPTCHA hoặc khóa IP quá nhiều.
---
#### Khả năng mở rộng không cần scrape
Scrapeless được thiết kế đặc biệt cho việc thu thập dữ liệu đồng thời cao. Nó cung cấp:
- **Các phiên trình duyệt song song**: Xử lý nhiều yêu cầu đồng thời, cho phép bạn thu thập một lượng lớn dữ liệu từ nhiều thành phố.
- **Thu thập dữ liệu chi phí thấp, hiệu quả cao**: Việc thu thập dữ liệu song song giảm chi phí mỗi trang đã thu thập đồng thời tối ưu hóa thông lượng.
- **Vượt qua các hệ thống phòng chống bot với khối lượng lớn**: Tự động xử lý CAPTCHA và các hệ thống xác minh khác, ngay cả trong quá trình thu thập dữ liệu với tải nặng.
---
> **Mẹo**: Đảm bảo rằng các yêu cầu của bạn được phân bổ đủ để bắt chước hành vi duyệt web giống con người và tránh bị giới hạn tốc độ hoặc cấm từ Idealista.
#### Khả năng mở rộng & Hiệu quả chi phí
Puppeteer thông thường gặp khó khăn trong việc mở rộng các phiên một cách hiệu quả và tích hợp với các hệ thống xếp hàng. Tuy nhiên, Scrapeless Scraping Browser hỗ trợ mở rộng liền mạch từ **hàng chục** phiên đồng thời đến **không giới hạn** phiên đồng thời, đảm bảo **thời gian chờ bằng không và không có thời gian chờ** ngay cả trong các tải công việc cao nhất.
Dưới đây là một so sánh về các công cụ khác nhau cho việc thu thập dữ liệu đồng thời cao. Ngay cả với trình duyệt đồng thời cao của Scrapeless, bạn không cần lo lắng về chi phí - thực tế, nó có thể giúp bạn tiết kiệm gần **50%** trong các khoản phí.
---
#### So sánh các công cụ
| **Tên công cụ** | **Tỷ lệ theo giờ (USD/giờ)** | **Phí proxy (USD/GB)** | **Hỗ trợ đồng thời** |
| --------------- | ------------------------------ | ----------------------- | --------------------- |
| **Scrapeless** | $0.063 – $0.090/giờ (phụ thuộc vào tính đồng thời & sử dụng) | $1.26 – $1.80/GB | 50 / 100 / 200 / 400 / 600 / 1000 / Không giới hạn |
| **Browserbase** | $0.10 – $0.198/giờ (bao gồm 2-5GB proxy miễn phí) | $10/GB (sau khi phân bổ miễn phí) | 3 (Cơ bản) / 50 (Nâng cao) |
| **Brightdata** | $0.10/giờ | $9.5/GB (Tiêu chuẩn); $12.5/GB (Miền nâng cao) | Không giới hạn |
| **Zenrows** | $0.09/giờ | $2.8 – $5.42/GB | Tối đa 100 |
| **Browserless** | $0.084 – $0.15/giờ (tính phí căn cứ vào đơn vị) | $4.3/GB | 3 / 10 / 50 |
> **Mẹo**: Nếu bạn cần **thu thập dữ liệu quy mô lớn** và **hỗ trợ đồng thời cao**, **Scrapeless** cung cấp tỷ lệ chi phí-hiệu suất tốt nhất.
### Chiến lược Kiểm soát Chi phí cho Web Scraping
Những người sử dụng cẩn thận có thể nhận thấy rằng các trang Idealista mà chúng tôi thu thập thường chứa lượng lớn hình ảnh bất động sản độ phân giải cao, bản đồ tương tác, video giới thiệu và kịch bản quảng cáo. Trong khi những yếu tố này thân thiện với người dùng cuối, chúng không cần thiết cho việc trích xuất dữ liệu và làm tăng đáng kể mức tiêu thụ băng thông và chi phí.

Để tối ưu hóa việc sử dụng băng thông, chúng tôi khuyến nghị người dùng áp dụng các chiến lược sau:
1. **Chặn Tài nguyên**: Chặn các yêu cầu tài nguyên không cần thiết để giảm mức tiêu thụ lưu lượng.
2. **Chặn URL yêu cầu**: Chặn các yêu cầu cụ thể dựa trên đặc điểm URL để giảm thiểu lưu lượng thêm nữa.
3. **Giả lập Thiết bị Di động**: Sử dụng cấu hình thiết bị di động để tải các phiên bản trang nhẹ hơn.
---
#### Các Chiến lược Chi tiết
##### 1. **Chặn Tài nguyên**
Kích hoạt chặn tài nguyên có thể cải thiện đáng kể hiệu quả thu thập dữ liệu. Bằng cách cấu hình chức năng `setRequestInterception` của Puppeteer, chúng ta có thể chặn các tài nguyên như hình ảnh, phương tiện, phông chữ và bảng kiểu, tránh việc tải xuống nội dung lớn.
##### 2. **Lọc URL yêu cầu**
Bằng cách xem xét các URL yêu cầu, chúng ta có thể lọc bỏ các yêu cầu không liên quan như dịch vụ quảng cáo và kịch bản phân tích bên thứ ba không liên quan đến việc trích xuất dữ liệu. Điều này giảm sự lưu lượng mạng không cần thiết.
##### 3. **Giả lập Thiết bị Di động**
Giả lập một thiết bị di động (ví dụ: đặt user agent thành iPhone) cho phép bạn tải một phiên bản trang nhẹ hơn, được tối ưu hóa cho di động. Điều này dẫn đến việc ít tài nguyên được tải và tăng tốc độ quá trình thu thập dữ liệu.
> Để biết thêm thông tin, hãy tham khảo [tài liệu chính thức của Scrapeless](https://docs.scrapeless.com/en/scraping-browser/guides/optimizing-cost/)
---
#### Mã Ví dụ
Dưới đây là một ví dụ về việc kết hợp ba chiến lược này sử dụng Scrapeless Cloud Browser + Puppeteer để thu thập tài nguyên tối ưu:
import puppeteer from 'puppeteer-core';
const scrapelessUrl = 'wss://browser.scrapeless.com/browser?token=your_api_key&session_ttl=180&proxy_country=ANY';
async function scrapeWithResourceBlocking(url) {
const browser = await puppeteer.connect({
browserWSEndpoint: scrapelessUrl,
defaultViewport: null
});
const page = await browser.newPage();
// Kích hoạt chặn yêu cầu
javascript
await page.setRequestInterception(true);
// Định nghĩa các loại tài nguyên cần chặn
const BLOCKED_TYPES = new Set([
'image',
'font',
'media',
'stylesheet',
]);
// Chặn các yêu cầu
page.on('request', (request) => {
if (BLOCKED_TYPES.has(request.resourceType())) {
request.abort();
console.log(`Đã chặn: ${request.resourceType()} - ${request.url().substring(0, 50)}...`);
} else {
request.continue();
}
});
await page.goto(url, {waitUntil: 'domcontentloaded'});
// Trích xuất dữ liệu
const data = await page.evaluate(() => {
return {
title: document.title,
content: document.body.innerText.substring(0, 1000)
};
});
await browser.close();
return data;
}
// Cách sử dụng
scrapeWithResourceBlocking('https://www.scrapeless.com')
.then(data => console.log('Kết quả thu thập dữ liệu:', data))
.catch(error => console.error('Thu thập dữ liệu thất bại:', error));
Bằng cách này, bạn không chỉ tiết kiệm chi phí lưu lượng truy cập cao, mà còn tăng tốc độ thu thập dữ liệu trong khi đảm bảo chất lượng dữ liệu, qua đó nâng cao tính ổn định và hiệu quả tổng thể của hệ thống.
5. Khuyến nghị về An ninh và Tuân thủ
Khi sử dụng Scrapeless để thu thập dữ liệu, các lập trình viên nên chú ý đến những điều sau:
- Tuân thủ file
robots.txt
của trang web mục tiêu và các luật lệ liên quan: Đảm bảo rằng các hoạt động thu thập dữ liệu của bạn là hợp pháp và tôn trọng hướng dẫn của trang web. - Tránh các yêu cầu quá mức có thể dẫn đến thời gian ngừng hoạt động của trang web: Hãy cẩn thận về tần suất thu thập dữ liệu để tránh quá tải máy chủ.
- Không thu thập thông tin nhạy cảm: Không thu thập dữ liệu riêng tư của người dùng, thông tin thanh toán hoặc bất kỳ nội dung nhạy cảm nào khác.
6. Kết luận
Trong thời đại dữ liệu lớn, việc thu thập dữ liệu đã trở thành nền tảng quan trọng cho sự chuyển đổi kỹ thuật số trên nhiều lĩnh vực. Đặc biệt trong các lĩnh vực như thông tin thị trường, so sánh giá thương mại điện tử, phân tích cạnh tranh, quản lý rủi ro tài chính và phân tích bất động sản, nhu cầu ra quyết định dựa trên dữ liệu ngày càng cấp bách. Tuy nhiên, với sự phát triển liên tục của công nghệ web, đặc biệt là việc sử dụng phổ biến nội dung tải động, các công cụ thu thập dữ liệu truyền thống dần bộc lộ những hạn chế của chúng. Những hạn chế này không chỉ làm cho việc thu thập dữ liệu trở nên khó khăn hơn mà còn dẫn đến việc gia tăng các cơ chế chống thu thập dữ liệu, nâng cao rào cản cho việc thu thập dữ liệu trên web.
Với sự tiến bộ của công nghệ web, các công cụ thu thập dữ liệu truyền thống không còn đáp ứng được nhu cầu thu thập dữ liệu phức tạp. Dưới đây là một số thách thức chính và các giải pháp tương ứng:
- Tải nội dung động: Các công cụ thu thập dữ liệu dựa trên trình duyệt, bằng cách mô phỏng việc trình diễn nội dung JavaScript của trình duyệt thực, đảm bảo có thể thu thập dữ liệu web tải động.
- Cơ chế chống thu thập dữ liệu: Sử dụng các vùng proxy, nhận diện dấu vân tay, mô phỏng hành vi, và các kỹ thuật khác, chúng ta có thể vượt qua các cơ chế chống thu thập dữ liệu thường được kích hoạt bởi các công cụ thu thập dữ liệu truyền thống.
- Thu thập dữ liệu với số lượng lớn: Trình duyệt không giao diện hỗ trợ triển khai tác vụ số lượng lớn, kết hợp với lập lịch proxy, để đáp ứng nhu cầu thu thập dữ liệu quy mô lớn.
- Vấn đề tuân thủ: Bằng cách sử dụng các API hợp pháp và dịch vụ proxy, các hoạt động thu thập dữ liệu có thể được đảm bảo tuân thủ các điều kiện của các trang web mục tiêu.
Do đó, các công cụ thu thập dữ liệu dựa trên trình duyệt đã trở thành xu hướng mới trong ngành. Công nghệ này không chỉ mô phỏng hành vi người dùng thông qua các trình duyệt thực mà còn linh hoạt xử lý cấu trúc phức tạp của các trang web hiện đại và các cơ chế chống thu thập dữ liệu, cung cấp cho các lập trình viên các giải pháp thu thập dữ liệu ổn định và hiệu quả hơn.
Trình duyệt thu thập dữ liệu Scrapeless đón nhận xu hướng công nghệ này bằng cách kết hợp trình diễn trình duyệt, quản lý proxy, công nghệ chống phát hiện và lập lịch tác vụ số lượng lớn, giúp các lập trình viên hoàn thành nhiệm vụ thu thập dữ liệu một cách hiệu quả và ổn định trong các môi trường trực tuyến phức tạp. Nó cải thiện hiệu quả thu thập dữ liệu và tính ổn định thông qua một số lợi thế cốt lõi:
-
Giải pháp trình duyệt số lượng lớn: Scrapeless hỗ trợ các tác vụ quy mô lớn, cho phép triển khai nhanh chóng hàng nghìn tác vụ thu thập dữ liệu để đáp ứng nhu cầu thu thập dữ liệu lâu dài.
-
Chống phát hiện như một dịch vụ: Các giải pháp CAPTCHA tích hợp và dấu vân tay tùy chỉnh giúp các lập trình viên vượt qua các cơ chế nhận diện vết và hành vi, giảm thiểu rủi ro bị chặn.
-
Công cụ gỡ lỗi hình ảnh - Phát lại phiên: Bằng cách phát lại từng tương tác với trình duyệt trong quá trình thu thập dữ liệu, các lập trình viên có thể dễ dàng gỡ lỗi và chẩn đoán vấn đề trong quá trình thu thập dữ liệu, đặc biệt là đối với việc xử lý các trang phức tạp và nội dung tải động.
-
Đảm bảo tuân thủ và minh bạch: Scrapeless nhấn mạnh việc thu thập dữ liệu tuân thủ, hỗ trợ tuân thủ các quy tắc
robots.txt
của trang web và cung cấp nhật ký thu thập dữ liệu chi tiết để đảm bảo các hoạt động thu thập dữ liệu của người dùng tuân thủ chính sách của các trang web mục tiêu. -
Khả Năng Mở Rộng Linh Hoạt: Scrapeless tích hợp liền mạch với Puppeteer, cho phép người dùng tùy chỉnh chiến lược thu thập dữ liệu của họ và kết nối với các công cụ hoặc nền tảng khác để có một quy trình làm việc thu thập và phân tích dữ liệu trọn vẹn.
Dù là thu thập dữ liệu từ các nền tảng thương mại điện tử để so sánh giá cả, trích xuất dữ liệu từ các trang web bất động sản, hay áp dụng trong việc giám sát rủi ro tài chính và phân tích thông tin thị trường, Scrapeless cung cấp những giải pháp hiệu quả cao, thông minh và đáng tin cậy cho nhiều ngành công nghiệp khác nhau.
Với các chi tiết kỹ thuật và các thực tiễn tốt nhất được trình bày trong bài viết này, bạn đã hiểu cách để tận dụng Scrapeless cho việc thu thập dữ liệu quy mô lớn. Dù là xử lý các trang động, trích xuất dữ liệu tương tác phức tạp, tối ưu hóa việc sử dụng băng thông, hay vượt qua các cơ chế chống thu thập dữ liệu, Scrapeless giúp bạn đạt được mục tiêu thu thập dữ liệu nhanh chóng và hiệu quả.
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.