🥳Tham gia Cộng đồng Scrapelessnhận thử nghiệm miễn phí của bạn để truy cập Bộ công cụ Web Scraping mạnh mẽ của chúng tôi!
Quay lại blog

Những Thực Hành Tốt Nhất Cho Việc Thu Thập Dữ Liệu Từ Web Là Gì?

Michael Lee
Michael Lee

Expert Network Defense Engineer

07-May-2025

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 kỷ nguyên AI

Với sự gia tăng nhanh chóng của AI sinh, các tác nhân AI và các ứng dụng có tính dữ liệu cao, trình duyệt đang tiến hóa từ những "công cụ tương tác người dùng" truyền thống thành "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 dựa vào các điểm cuối API duy nhất mà thay vào đó tận dụng việc kiểm soát trình duyệt tự động để xử lý các tương tác trang phức tạp, thu thập nội dung, tổ chức nhiệm vụ và truy xuất ngữ cảnh.

Từ việc so sánh giá trên các trang thương mại điện tử và chụp ảnh bản đồ đến việc phân tích kết quả tìm kiếm và trích xuất nội dung từ mạng xã hội, trình duyệt đang trở thành giao diện quan trọng để AI truy cập dữ liệu thực tế. 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 chiến lược xoay vòng proxy.

Giới thiệu Trình duyệt thu thập không rác—một nền tảng trình duyệt nâng cao dựa trên đám mây được thiết kế đặc biệt để 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à bảo trì proxy. Hơn nữa, nó cung cấp lập lịch đồng thời dựa trên đám mây, mô phỏng hành vi giống người, và trích xuất dữ liệu có cấu trúc, tự định vị mình như 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à quy trình 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 web. Bằng cách phân tích các xu hướng ngành hiện tại và phương hướng tương lai, chúng tôi nhằm cung cấp cho các nhà phát triển, người xây dựng sản phẩm và các nhóm 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 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 điều khiển bằng AI, trình duyệt không còn chỉ là công cụ cho tương tác 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 lẫn không có cấu trúc. Trong nhiều kịch bản thực tế, các API không có sẵn hoặc bị giới hạn, khiến cho việc mô phỏng hành vi con người thông qua trình duyệt trở nên cần thiết cho việc 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á trên các trang thương mại điện tử: Dữ liệu giá cả và hàng 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ả công cụ tìm kiếm: Nội dung phải được tải hoàn toàn bằng cách cuộn và nhấp vào các phần tử trang.
  • Các trang web đa ngôn ngữ, hệ thống cũ và nền tảng intranet: Không thể truy cập dữ liệu 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 trong việc ổn định dưới điều kiện đồng thời cao, thường xuyên bị chặn bởi các biện pháp chống bot, và chi phí bảo trì cao. Trình duyệt thu thập không rác, với việc triển khai dựa trên đám mây và mô phỏng hành vi trình duyệt thực tế, 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 có độ tin cậy cao—được coi là hạ tầng quan trọng cho các hệ thống tự động hóa AI và quy trình dữ liệu.


1.2 Thách thức của các cơ chế chống bot

Cùng lúc đó, 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ị các trang web mục tiêu gán nhãn là lưu lượng bot, dẫn đến việc bị cấm IP và hạn chế 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ẫu truy cập bất thường qua User-Agent, kết xuất canvas, bắt tay TLS, và hơn thế nữa.
  • Xác thực 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 bất thường, tốc độ cuộn và logic tương tác.

Trình duyệt thu thập không rác vượt qua hiệu quả những thách thức này thông qua việc 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ệ công cụ tự động hóa tiếp theo.


II. Các khả năng cốt lõi của Scrapeless

Trình duyệt thu thập không 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 tế

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 dùng thực tế. 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ờ 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 có vẻ giống người rất cao.
  • Hỗ trợ địa phương hóa: Tùy chỉnh ngôn ngữ, khu vực, và cài đặt múi giờ để làm cho các tương tác với trang web mục tiêu trở nên tự nhiên hơn.
Tùy chỉnh sâu các 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 tế" 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.
  • Ánh xạ độ phân giải màn hình: Thiết lập các giá trị trả về của screen.widthscreen.height để mô phỏng các kích thước hiển thị thông thường.
  • 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.
  • Mô phỏng môi trường địa phương hóa: Hoàn toàn hỗ trợ 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 và khả năng mở rộng trên đám mây

Scrapeless được triển khai hoàn toàn trên đám mây và mang lại các lợi ích 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 phức tạp.

So sánh Hiệu suất

So với các công cụ truyền thống như SeleniumPlaywright, Scrapeless vượt trội 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 đồng thời cao. Dưới đây là tóm tắt khả năng của nó từ các chiều khác nhau:

Tính năng / Nền tảng Scrapeless Browserless Browserbase HyperBrowser Bright Data ZenRows Steel.dev
Phương pháp triển khai Dựa trên đám mây Container Puppeteer trên đám mây Cụm đám mây đa trình duyệt Nền tảng trình duyệt không đầu Triển khai trên đám mây Giao diện API trình duyệt Cụm đám mây 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 Tối đa không giới hạn (tùy thuộc vào gói) Tối đa 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 + Ẩ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í runtime trình duyệt $0.063 – $0.090/giờ (bao gồm vượt qua CAPTCHA miễn phí) $0.084 – $0.15/giờ (theo đơn vị) $0.10 – $0.198/giờ (bao gồm proxy miễn phí 2–5GB) $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 quá hạn miễn phí) Không có dữ liệu chính thức $9.5/GB (chuẩn); $12.5/GB (tên miền cao cấp) $2.8 – $5.42/GB $3 – $8.25/GB

2.3 Giải pháp tự động làm CAPTCHA và cơ chế 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 như: reCAPTCHA, Cloudflare Turnstile/Challenge, AWS WAF, DataDome, v.v.

Cơ chế theo dõi sự kiện

Scrapeless cung cấp ba sự kiện cốt lõi để theo dõi quá trình giải CAPTCHA:

Tên sự kiện Mô tả
Captcha.detected CAPTCHA đã được phát hiện
Captcha.solveFinished CAPTCHA đã được giải quyết
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ả của việc giải quyết
message chuỗi Thông điệp trạng thái (ví dụ: "NOT_DETECTED", "SOLVE_FINISHED")
token? chuỗi Token trả về khi thành công (tùy chọn)

2.4 Hỗ trợ proxy mạnh mẽ

Scrapeless cung cấp một hệ thống tích hợp proxy linh hoạt và có thể kiểm soát, hỗ trợ nhiều chế độ proxy:

  • Proxy dân cư tích hợp sẵn: hỗ trợ proxy địa lý ở 195 quốc gia/khu vực trên toàn thế giới, ngay lập tức.
  • Proxy tùy chỉnh (gói đă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 họ, không bao gồm trong tính phí proxy của Scrapeless.

2.5 Phát lại phiên

Phát lại phiên là một trong những tính năng mạnh mẽ nhất của Scrapeless Scraping Browser. Nó cho phép bạn phát lại phiên từng trang để kiểm tra các thao tác và yêu cầu mạng đã được thực hiện.

3. Ví dụ mã: Tích hợp và sử dụng Scrapeless

3.1 Sử dụng Scrapeless Scraping Browser

Ví dụ Puppeteer

Copy
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

Copy
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ố Dấu vân tay của Scrapeless Scraping Browser

Dưới đây là một mã ví dụ đơn giản thể hiện cách tích hợp chức năng tùy chỉnh dấu vân tay của trình duyệt Scrapeless thông qua Puppeteer và Playwright:
Ví dụ Puppeteer

Copy
const puppeteer = require('puppeteer-core');

// dấu vân tay 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', // yêu cầu
  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

Copy
const { chromium } = require('playwright-core');

// dấu vân tay 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', // yêu cầu
  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);

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();
})();

Copy
### 3.3 Ví dụ theo dõi sự kiện CAPTCHA
Dưới đây là một ví dụ mã hoàn chỉnh về việc sử dụng Scrapeless để theo dõi các sự kiện CAPTCHA, cho thấy cách theo dõi trạng thái giải quyết CAPTCHA trong 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 quyết CAPTCHA thất bại'))
);
setTimeout(() =>
reject(new Error('Thời gian giải quyết CAPTCHA đã hết')),
5 * 60 * 1000
);
});

Copy
Sau khi làm chủ các tính năng cốt lõi và ưu điểm của Scrapeless Scraping Browser, chúng ta không chỉ hiểu rõ giá trị của nó trong việc thu thập dữ liệu trên web hiện đại mà còn có thể tận dụng hiệu quả hơn những ưu điểm về hiệu suất của nó. Để giúp các nhà phát triển tự động hóa và thu thập dữ liệu từ các trang web một cách hiệu quả và an toàn hơn, chúng tôi sẽ khám phá cách áp dụng Scrapeless Scraping Browser 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. Các phương pháp tốt nhất cho tự động hóa và thu thập dữ liệu trên web bằng Scrapeless Scraping Browser
> **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 trình bày các kỹ thuật thu thập dữ liệu trên 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ự thận trọng 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ể làm hỏng 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 tái sử dụng toàn bộ bộ dữ liệu công cộng mà 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) (nghĩa là, các trang web bị ngắt kết nối 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 đã bật Cloudflare (như example.com), yêu cầu của bạn sẽ đến trước 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 hay không dựa trên một số quy tắc, chẳng hạn như:  
- Liệu trang đã được lưu trữ có thể được trả về trực tiếp;  
- Liệu bạn cần vượt qua một bài kiểm tra CAPTCHA;  
- Liệu yêu cầu của bạn sẽ bị chặn;  
- Liệu yêu cầu sẽ được chuyển tiếp đến máy chủ trang web thực tế (gốc).  

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 tăng cường bảo mật cho trang web nhưng cũng đặt ra những thách thức lớn cho việc truy cập tự động.  
Bỏ 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 bỏ qua Cloudflare lại khó khăn.

2. **Những thách thức trong việc bỏ qua Bảo vệ Cloudflare**  
Việc bỏ qua Cloudflare không dễ dàng, đặc biệt là khi các tính năng chống bot tiên tiến (như Quản lý Bot, Thử thách Quản lý, Xác minh Turnstile, thử thách JS, v.v.) được bậ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 các yêu cầu được thực hiện do các đặc điểm dấu vân tay rõ ràng hoặc mô phỏng hành vi không tự nhiên.  

Mặc dù có một số công cụ mã nguồn mở thiết kế đặc biệt để bỏ 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 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à để bỏ qua các cơ chế bảo vệ của Cloudflare một cách bền vững và ổn định, các nhóm thường cần có khả năng phát triển nội bộ và đầu tư liên tục vào tài nguyên cho việc bảo trì và cập nhật.  
Dưới đây là các thách thức chính trong việc bỏ qua bảo vệ Cloudflare:  
- **Nhận diện Dấu vân tay Trình duyệt 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 hiển thị Canvas/WebGL. Nếu nó phát hiện ra trình duyệt hoặc hành vi tự động bất thường, nó sẽ chặn yêu cầu.
- **Cơ chế Thách thức JS Phức tạp**: Cloudflare tạo động các thách thức JavaScript (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 đúng 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 các quỹ đạo hành vi của người dùng, chẳng hạn như chuyển động chuột, thời gian 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 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 cụ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 cho các phương pháp phân tích gói truyền thống trở nên không hiệu quả.  

Vì vậy, việc vượt qua Cloudflare thành công đòi hỏi phải mô phỏng hành vi trình duyệt thực tế, thực thi JavaScript một cách động, cấu hình dấu vân tay linh hoạt, và sử dụng proxy chất lượng cao cùng với các cơ chế lập lịch động.


## Vượt qua Cloudflare của Idealista với Trình duyệt Scrapeless để Thu thập Dữ liệu Bất động sản

---

Trong chương này, chúng ta sẽ trình bày cách sử dụng Trình duyệt Scrapeless để xây dựng một hệ thống tự động hóa hiệu quả, ổn định và chống chống thu thập dữ liệu nhằm 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. Idealista sử 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 diện hành vi người dùng, khiến nó trở thành một mục tiêu đầy thách thức.  
Chúng ta 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 của Cloudflare  
- Tùy chỉnh dấu vân tay và mô phỏng hành vi người dùng thực  
- Sử dụng Trình phát lại Phiên  
- Thu thập dữ liệu đồng thời cao với nhiều cụ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 ở Nam Âu, cung cấp hàng triệu danh sách cho nhiều loại tài sản, bao gồm nhà ở, căn hộ và phòng chia sẻ. Với giá trị thương mại cao của dữ liệu bất động sản, nền tảng này đã triển khai các biện pháp chống thu thập dữ liệu nghiêm ngặt.  
Để chống lại việc thu thập dữ liệu 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 nhằm bảo vệ chống lại 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 dữ liệu 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 Tiêu đề HTTP**: Kiểm tra loại trình duyệt, cài đặt ngôn ngữ và dữ liệu tham chiếu để kiểm tra các sự chênh lệch. Các tiêu đề nghi ngờ có thể tiết lộ các nỗ lực ngụy trang bot tự động.  
- **Phát hiện và Chặn Dấu vân tay**: Nhận biết lưu lượng truy cập được tạo ra bởi các công cụ tự động (như Selenium và Puppeteer) 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 Nút Biên**: Các yêu cầu trước tiên 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à có 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 ta sẽ giải thích chi tiết cách sử dụng Trình duyệt Scrapeless để 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 với Trình duyệt Scrapeless

---

#### Điều kiện tiên quyết

Trước khi bắt đầu, hãy đảm bảo rằng chúng ta có các 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

Copy
- **ChromeDriver**: Tải [ChromeDriver](https://developer.chrome.com/docs/chromedriver/downloads). Hãy chắc chắn chọn phiên bản tương ứng với phiên bản Chrome đã 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 Scrapeless. 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í 2 đô la.

#### Tìm kiếm Dữ liệu

Mục tiêu của chúng ta là trích xuất thông tin chi tiết về từng danh sách bất động sản trên Idealista. Chúng ta có thể sử dụng các 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 cần nhắm đến.

Nhấp chuột phải vào bất kỳ vị trí nào trên trang và chọn **Kiểm tra** để xem mã nguồn của trang.
![](https://assets.scrapeless.com/prod/posts/scrapeless-scraping-browser-best-practices/ccd81619b93086aeff0822e2af473cef.png)

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 đã được chú thích, cho thấy vị trí của tất cả thông tin cho mỗi bất động sản.

![](https://assets.scrapeless.com/prod/posts/scrapeless-scraping-browser-best-practices/83bdd92261b7f521ebde697a5c2afd79.png)

Bằng cách kiểm tra mã nguồn HTML, chúng tôi có thể xác định chọn lọc CSS cho mỗi điểm dữ liệu. Các chọn lọc CSS là các mẫu được sử dụng để chọn các phần tử trong tài liệu HTML.

![](https://assets.scrapeless.com/prod/posts/scrapeless-scraping-browser-best-practices/86dbbfc0a234093f84f6a35ffe6965a9.png)

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 nằm 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á cả được tìm thấy trong thẻ `<span>` với lớp `item-price`.
- Và cứ như vậy đối với các điểm dữ liệu khác.

### Bước 1: Cài Đặt Selenium với ChromeDriver

Đầu tiên, chúng ta 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 đến ChromeDriver của bạn")
driver = webdriver.Chrome(service=s, chrome_options=chrome_options)

Copy
Mã này nhập các mô-đun cần thiết, bao gồm `seleniumwire` cho các tương tác trình duyệt nâng cao và `BeautifulSoup` cho việc 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ế độ không có giao diện 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 toàn.
Copy
driver.get(url)
time.sleep(8)  # Điều chỉnh tùy thuộc vào thời gian tải của trang web
Copy
Tại đây, lệnh `driver.get(url)` chỉ thị cho 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 cho trang web tải hoàn toàn. Thời gian chờ này có thể được điều chỉnh tùy thuộc vào 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ó:
Copy
soup = BeautifulSoup(driver.page_source, "lxml")
driver.quit()
Copy
Ở đâ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 trình 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.
Copy
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 = {
        "Title": listing.find("a", class_="item-link").get("title", "nil"),
        "Price": listing.find("span", class_="item-price").get_text(strip=True),
        "Bedrooms": bedrooms,
        "Area": area,
        "Description": description_text,
        "Image URL": first_image_url,
    }
    extracted_data.append(listing_info)
Copy
Tại đây, chúng tôi tìm kiếm tất cả các phần tử khớp với thẻ `article` có tên lớp là `item`, đại diện cho các danh sách bất động sản riêng biệt. Đối với mỗi danh sách, chúng tôi trích xuất tiêu đề, chi tiết (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"new_revised_data_{current_datetime}.json"
with open(json_filename, "w", encoding="utf-8") as json_file:

python Copy
json.dump(data_extracted, json_file, ensure_ascii=False, indent=2)
    print(f"Dữ liệu đã được lưu vào {json_filename}")
url = "https://www.idealista.com/venta-viviendas/alcala-de-henares-madrid/"
danh_sach_idealista = listings(url)

Vượt qua Phát hiện Bot

Nếu bạn đã chạy đoạn mã ít nhất hai lần trong 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 Cloudflare Challenge ban đầu tải tập lệnh cf-chl-bypass và thực hiện các phép toán 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 web như Idealista mà không cần xây dựng và duy trì hạ tầng scraping của riêng bạn. Scrapeless Scraping Browser là một giải pháp tự động hóa có độ đồng thời cao được xây dựng cho AI. Đây là một nền tảng trình duyệt có hiệu suất cao, tiết kiệm chi phí, chống chặn, được thiết kế cho việc scraping dữ liệu quy mô lớn và mô phỏng hành vi gần giống con người. Nó có thể xử lý reCAPTCHA, Cloudflare Turnstile/Challenge, AWS WAF, DataDome và nhiều thứ khác trong thời gian thực, làm cho nó trở thành một giải pháp scraping web hiệu quả.

Dưới đây là các bước để vượt qua sự bảo vệ của Cloudflare bằng cách sử dụ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, chẳng hạn như scrapeless-bypass.
  • Điều hướng đến thư mục trong terminal của bạn:
Copy
cd path/to/scrapeless-bypass
1.2 Khởi tạo Dự án Node.js

Chạy lệnh sau để tạo file package.json:

Copy
npm init -y
1.3 Cài đặt các thư viện cần thiết

Cài đặt Puppeteer-core, cho phép kết nối từ xa đến phiên trình duyệt:

Copy
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 đủ:

Copy
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 mục 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 Puppeteer với 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à:

Copy
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 Tham số Kết nối
  • token: Khóa API Scrapeless của bạn
  • session_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 kịch bản Puppeteer

4.1 Tạo tệp kịch bản

Trong thư mục dự án của bạn, tạo một tệp JavaScript mới có tên 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:

Copy
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}`;

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 kịch bản để mở một trang mới và điều hướng đến một trang web được bảo vệ bởi Cloudflare:

Copy
const page = await browser.newPage();
await page.goto('https://www.scrapingcourse.com/cloudflare-challenge', { waitUntil: 'domcontentloaded' });
4.4 Chờ các phần tử của trang tải

Đảm bảo sự bảo vệ của Cloudflare đã được vượt qua trước khi tiếp tục:

Copy
await page.waitForSelector('main.page-content .challenge-info', { timeout: 30000 }); // Điều chỉnh bộ chọn nếu cần thiết
4.5 Chụp màn hình

Để xác minh xem liệu sự bảo vệ của Cloudflare đã được vượt qua thành công hay chưa, hãy chụp một ảnh màn hình của trang:

Copy
await page.screenshot({ path: 'challenge-bypass.png' });
console.log('Ảnh chụp màn hình đã được lưu dưới dạng challenge-bypass.png');
4.6 Kịch bản hoàn chỉnh

Dưới đây là kịch bản hoàn chỉnh:

Copy
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ờ cho 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ột ảnh màn hình
    await page.screenshot({ path: 'challenge-bypass.png' });
    console.log('Ảnh 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 đã được đóng');
  } catch (error) {
    console.error('Lỗi:', error);
  }
})();

Bước 5: Chạy kịch bản

5.1 Lưu kịch bản

Đảm bảo rằng kịch bản được lưu lại dưới dạng bypass-cloudflare.js.

5.2 Thực hiện kịch bản

Chạy kịch bản bằng Node.js:

Copy
node bypass-cloudflare.js
5.3 Đầu ra dự kiến

Nếu mọi thứ được thiết lập đúng, terminal sẽ hiển thị:

Copy
Đã kết nối với Scrapeless
Ảnh chụp màn hình đã được lưu dưới dạng challenge-bypass.png
Trình duyệt đã được đó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 sự bảo vệ của Cloudflare đã được vượt qua thành công.

Bạn cũng có thể tích hợp Trình duyệt Scraping Scrapeless trực tiếp vào mã scraping của bạn:

Copy
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 thu thập 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ách thức của Cloudflare bằng cách sử dụng 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 đề phổ biến mà bạn có thể gặp phải

  • Thời gian phản hồi chậm sau nhiều lần thu thập dữ liệu
    Trang web có thể hạn chế yêu cầu dựa trên địa chỉ IP hoặc các mẫu hành vi.

  • Bố cục trang không tải đúng
    Nội dung động có thể phụ thuộc vào môi trường trình duyệt thực, gây ra dữ liệu thiếu hoặc hỏng trong quá trình thu thập dữ liệu.

  • Thiếu danh sách trong 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 các mẫu lưu lượng nghi ngờ.


Các vấn đề này thường được gây ra bởi cấu hình trình duyệt giống hệt nhau cho mỗi yêu cầu. Nếu dấu vân tay (fingerprint) của trình duyệt của bạn không thay đổi, hệ thống chống bot dễ dàng phát hiện tự động hóa.


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ích hợp cho việc tùy chỉnh dấu vân tay để bắt chước hành vi 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 Mô phỏng 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 khớp giữa di động và máy tính để bàn.
Địa phương hóa Đồng bộ ngôn ngữ và múi giờ với định vị địa lý để 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 nguy cơ bị phát hiện và cải thiện độ tin cậy trong việc trích xuất dữ liệu.

Ví dụ mã:

Copy
const puppeteer = require('puppeteer-core');

const query = new URLSearchParams({
  token: 'your-scrapeless-api-key', // bắt buộc
  session_ttl: 180,
  proxy_country: 'ANY',
  // Thiết lập 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 của trình duyệt, độ ổn định của trang web 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 thu thập dữ liệu quy mô lớn, các vấn đề không mong đợi vẫn có thể gây ra sự cố trong việc 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, nắm bắt 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 thu thập dữ liệu từ các trang web phức tạp như Idealista, Phát lại Phiên có thể cải thiện đáng kể hiệu quả gỡ lỗi.

Lợi ích Mô tả
Theo dõi Vấn đề 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 phải đoán mò
Không cần chạy lại Mã Phân tích vấn đề trực tiếp từ phiên phát lại thay vì chạy lại bộ thu thập dữ liệu
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 khắc phục sự cố
Phân tích Nội dung Động Hiểu cách dữ liệu được tải động hoạt động trong quá trình thu thập

Mẹo Sử dụng

Một khi Phát lại Phiên được kích hoạt, hãy kiểm tra nhật ký phát lại trước mỗi khi một lần thu thập dữ liệu 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 vấn đề nhanh hơn và giảm thời gian gỡ lỗi.

Cấu hình Proxy

Khi thu thập dữ liệu từ Idealista, điều quan trọng là nhận ra rằng nền tảng này rất nhạy cảm với các đị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ừ nước ngoài, Idealista có thể:

  • Chặn yêu cầu hoàn toàn
  • Trả về một phiên bản đơn giản hóa hoặc rút gọn 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ã quốc gia hai chữ cái (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:

Copy
proxy_country: 'ES',

Tính đồng thời cao

Trang mà chúng tôi vừa thu thập dữ liệu từ Idealista—Danh sách Bất động sản Alcalá de Henares—có tới 6 trang danh sách.

Khi bạn nghiên cứu các xu hướng trong 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 thu thập dữ liệu bất động sản từ 20+ thành phố hàng ngày, bao phủ nghìn trang. Trong một số trường hợp, bạn thậm chí cần làm mới dữ liệu này mỗi giờ.

Yêu cầu cao về khả năng đồng thời

Để 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 mất thời gian chờ đợi 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 trên quy mô lớn.
  • Quản lý phiên: Duy trì các phiên liên tục để tránh các CAPTCHA hoặc chặn IP quá mức.

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:

  • Phiên trình duyệt song song: Xử lý nhiều yêu cầu cùng một lúc, cho phép bạn thu thập lượng lớn dữ liệu từ nhiều thành phố.
  • Chi phí thấp, hiệu suất cao: Việc thu thập dữ liệu đồng thời giảm chi phí trên mỗi trang đã thu thập trong khi tối ưu hóa lưu lượng.
  • Vượt qua các hệ thống bảo vệ 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ả khi thu thập dữ liệu với khối lượng lớn.

Mẹo: Đảm bảo các yêu cầu của bạn được phân bố đủ để mô phỏng hành vi duyệt web giống như con người và ngăn chặn việc giới hạn tỷ lệ 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ừ mấy chục phiên đồng thời đến không giới hạn phiên đồng thời, đảm bảo không có thời gian xếp hàng và không có thời gian chờ ngay cả trong những giai đoạn tải công việc cao.

Dưới đây là sự so sánh của 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í—trên thực tế, nó có thể giúp bạn tiết kiệm gần 50% trong phí.


So sánh 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ờ (tùy thuộc vào khả năng đồng thời & mức 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 proxy miễn phí 2-5GB) $10/GB (sau phân bổ miễn phí) 3 (Cơ bản) / 50 (Nâng cao)
Brightdata $0.10/giờ $9.5/GB (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ờ (thanh toán theo đơ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ớnhỗ trợ đồng thời cao, Scrapeless mang lại tỷ lệ chi phí so với hiệu suất tốt nhất.

Chiến lược Kiểm soát Chi phí cho Thu thập Dữ liệu Web

Người 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 nhiều hình ảnh bất động sản độ phân giải cao, bản đồ tương tác, video trình bày và mã 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 là không cần thiết cho việc trích xuất dữ liệu và tăng tiêu thụ băng thông và chi phí đáng kể.

Để tối ưu hóa việc sử dụng lưu lượng, chúng tôi khuyên người dùng áp dụng các chiến lược sau:

  1. Ngăn chặn Tài nguyên: Ngăn chặn các yêu cầu tài nguyên không cần thiết để giảm tiêu thụ lưu lượng.
  2. Ngăn chặn URL Yêu cầu: Ngăn 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 hơn 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.

Chiến lược Chi tiết

1. Ngăn chặn Tài nguyên

Bật ngăn 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 tôi có thể chặn các tài nguyên như hình ảnh, phương tiện, phông chữ và bảng định kiểu, tránh việc tải nội dung lớn.

2. Lọc URL Yêu cầu

Bằng cách kiểm tra các URL yêu cầu, chúng tôi có thể lọc ra các yêu cầu không liên quan như dịch vụ quảng cáo và các mã 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 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 nhẹ hơn, tối ưu hóa cho di động của trang. Điều này dẫn đến việc ít tài nguyên hơ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, vui lòng tham khảo tài liệu chính thức của Scrapeless


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:

Copy
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();
 
    // Bật ngăn chặn yêu cầu
```vi
await page.setRequestInterception(true);

// Định nghĩa các loại tài nguyên để chặn
const BLOCKED_TYPES = new Set([
    'hình ảnh',
    'phông chữ',
    'phương tiện',
    'tệp kiểu',
]);

// 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));

Theo cách này, bạn không chỉ tiết kiệm chi phí lưu lượng 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, từ đó nâng cao độ ổn định và hiệu quả tổng thể của hệ thống.

5. Khuyến nghị về Bảo mật và Tuân thủ

Khi sử dụng Scrapeless để thu thập dữ liệu, các nhà phát triển nên chú ý đến những điều sau:

  • Tuân thủ tệp robots.txt của trang web mục tiêu và các luật lệ và quy định 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 các 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: Chú ý đến tần suất thu thập dữ liệu để ngăn chặn 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 cá nhân, thông tin thanh toán hay bất kỳ nội dung nhạy cảm nào khác.

6. Kết luận

Trong kỷ nguyên 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 mọi ngành. Đặc biệt trong các lĩnh vực như trí tuệ 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 đưa ra quyết định dựa trên dữ liệu ngày càng trở nên cấp bách. Tuy nhiên, với sự tiến bộ không ngừng của công nghệ web, đặc biệt là việc sử dụng rộng rãi 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 giới hạn của chúng. Những hạn chế này không chỉ khiến việc thu thập dữ liệu trở nên khó khăn hơn mà còn dẫn đến sự leo thang của 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ự phát triển 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à giải pháp tương ứng:

  • Tải Nội Dung Động: Các công cụ thu thập dựa trên trình duyệt, bằng cách mô phỏng việc trình bày nội dung JavaScript trong trình duyệt thực, đảm bảo rằng chúng có thể thu thập dữ liệu web được tải động.
  • Cơ Chế Chống Thu Thập Dữ Liệu: Sử dụng các bể proxy, nhận dạng dấu vân tay, mô phỏng hành vi và các kỹ thuật khác, chúng ta có thể bỏ qua các cơ chế chống thu thập thường được kích hoạt bởi các công cụ thu thập truyền thống.
  • Thu Thập Dữ Liệu Đồng Thời Cao: Các trình duyệt không đầu có hỗ trợ triển khai tác vụ đồng thời cao, kết hợp với lịch trình 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 và dịch vụ proxy hợp pháp, các hoạt động thu thập dữ liệu có thể được đảm bảo tuân thủ các điều khoản của các trang web mục tiêu.

Do đó, các công cụ thu thập 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 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 và các cơ chế chống thu thập của các trang web hiện đại, cung cấp cho các nhà phát triển những 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ắm bắt xu hướng công nghệ này bằng cách kết hợp trình bày 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ụ đồng thời cao, giúp các nhà phát triển hoàn thành các 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 suất và sự ổn định trong quá trình thu thập dữ liệu thông qua một số lợi thế cốt lõi:

  • Giải Pháp Trình Duyệt Đồng Thời Cao: Scrapeless hỗ trợ các tác vụ quy mô lớn, đồng thời cao, cho phép triển khai nhanh chóng hàng nghìn nhiệm vụ thu thập dữ liệu để đáp ứng nhu cầu thu thập lâu dài.
  • Chống Phát Hiện như Một Dịch Vụ: Các công cụ giải CAPTCHA tích hợp và dấu vân tay tùy chỉnh giúp các nhà phát triển vượt qua các cơ chế nhận diện dấu vân tay và hành vi, giảm thiểu đáng kể 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 mỗi tương tác của trình duyệt trong quá trình thu thập dữ liệu, các nhà phát triển có thể dễ dàng gỡ lỗi và chẩn đoán các vấn đề trong quá trình thu thập, đặc biệt là trong 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ủ quy định, 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 rằng các hoạt động thu thập dữ liệu của người dùng tuân thủ các chính sách của các trang web mục tiêu.
  • Mở Rộng Linh Hoạt: Scrapeless tích hợp một cách 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 gói.

Cho 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á, trích xuất dữ liệu từ trang web bất động sản, hay áp dụng vào 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 các 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 phương pháp thực hành tốt được đề cập 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. Cho 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, hoặc vượt qua các cơ chế chống thu thập dữ liệu, Scrapeless giúp bạn đạt được các mục tiêu thu thập dữ liệu một cách 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.

Bài viết phổ biến nhất

Danh mục