Sử dụng Node.js để quét web là một nhu cầu phổ biến, cho dù bạn muốn thu thập dữ liệu từ một trang web để phân tích hoặc hiển thị nó trên trang web của riêng bạn. Node.js là một công cụ tuyệt vời cho nhiệm vụ này.
Bằng cách đọc bài viết này, bạn sẽ:
Node.js
Quét web là quá trình trích xuất dữ liệu từ các trang web. Nó liên quan đến việc sử dụng các công cụ hoặc chương trình để mô phỏng hành vi của trình duyệt và trích xuất dữ liệu cần thiết từ các trang web. Quá trình này cũng được biết đến với các thuật ngữ như thu hoạch web hoặc trích xuất dữ liệu web.
Quét web có nhiều lợi ích, như:
"Node.js" là một môi trường thực thi mã JavaScript mã nguồn mở, đa nền tảng mà thực thi mã JavaScript ở phía máy chủ. Được tạo ra bởi Ryan Dahl vào năm 2009, nó được xây dựng trên công cụ V8 JavaScript của Chrome. Node.js được thiết kế để xây dựng các ứng dụng mạng có hiệu suất cao, có khả năng mở rộng, đặc biệt là những ứng dụng xử lý một lượng lớn kết nối đồng thời, như các máy chủ web và ứng dụng thời gian thực.
Node.js là một môi trường thực thi mã JavaScript phổ biến cho phép bạn sử dụng JavaScript cho việc phát triển phía máy chủ. Sử dụng Node.js để quét web mang lại nhiều lợi ích:
Không chần chừ, hãy bắt đầu với việc quét dữ liệu bằng Node.js
!
Trước hết, tải xuống và cài đặt Node.js
từ trang web chính thức của nó. Theo các hướng dẫn cài đặt chi tiết cho hệ điều hành của bạn.
Node.js cung cấp nhiều thư viện cho việc quét web, chẳng hạn như Request, Cheerio và Puppeteer. Ở đây, chúng ta sẽ sử dụng Puppeteer làm ví dụ. Cài đặt Puppeteer bằng npm với các lệnh sau:
mkdir web-scraping && cd web-scraping
npm init -y
npm install puppeteer-core
Tạo một tệp, chẳng hạn như index.js, trong thư mục dự án của bạn và thêm mã sau:
goTo
được sử dụng để mở một trang web. Nó có hai tham số: URL của trang web để mở và một đối tượng cấu hình. Chúng ta có thể thiết lập các tham số khác nhau trong đối tượng này, chẳng hạn như waitUntil, chỉ định để trả về sau khi trang đã tải xong.waitForSelector
được sử dụng để đợi một bộ chọn xuất hiện. Nó lấy một bộ chọn làm tham số và trả về một đối tượng Promise khi bộ chọn xuất hiện trên trang. Chúng ta có thể sử dụng đối tượng Promise này để xác định xem bộ chọn đã xuất hiện chưa.content
được sử dụng để lấy nội dung của trang. Nó trả về một đối tượng Promise, mà chúng ta có thể sử dụng để truy xuất nội dung của trang.page.$eval
được sử dụng để lấy nội dung văn bản của một bộ chọn. Nó lấy hai tham số: tham số đầu tiên là bộ chọn và tham số thứ hai là một hàm sẽ được thực thi trong trình duyệt. Hàm này cho phép chúng ta lấy nội dung văn bản của bộ chọn.const puppeteer = require('puppeteer');
async function run() {
const browser = await puppeteer.launch({
headless: false,
ignoreHTTPSErrors: true,
});
const page = await browser.newPage();
await page.goto('https://airbnb.com/experiences/1653933', {
waitUntil: 'domcontentloaded',
});
await page.waitForSelector('h1');
await page.content();
const title = await page.$eval('h1', (el) => el.textContent);
console.log(title);
await browser.close();
}
run();
Chạy index.js
với lệnh sau:
node index.js
Sau khi chạy đoạn mã, bạn sẽ thấy kết quả đầu ra trên cửa sổ terminal:
Trong ví dụ này, chúng tôi sử dụng puppeteer.launch()
để tạo một phiên trình duyệt, browser.newPage()
để tạo một trang mới, page.goto()
để mở một trang web, page.waitForSelector()
để đợi một bộ chọn xuất hiện và page.$eval()
để lấy nội dung văn bản của một bộ chọn.
Ngoài ra, chúng ta có thể truy cập trang web đã được quét thông qua một trình duyệt, mở công cụ phát triển và sau đó sử dụng bộ chọn để tìm phần tử chúng ta cần, so sánh nội dung phần tử với những gì chúng ta nhận được trong mã để đảm bảo tính nhất quán.
Khi sử dụng Puppeteer để quét web, một số trang web có thể phát hiện ra hoạt động quét của bạn và trả về lỗi như 403 Forbidden. Để tránh bị phát hiện, bạn có thể sử dụng các kỹ thuật khác nhau như:
Các phương pháp này giúp tránh được phát hiện, cho phép nhiệm vụ quét web của bạn tiếp tục một cách trơn tru. Đối với các kỹ thuật chống phát hiện tiên tiến, hãy xem xét việc sử dụng các công cụ như Nstbrowser - Trình duyệt Chống Phát Hiện Tiên Tiến.