
Anh Tuan
Data Science Expert

Web scraping đã trở thành một công cụ cần thiết để tự động hóa việc thu thập dữ liệu và theo dõi các thay đổi trên trang web. Trong bài đăng trên blog này, chúng ta sẽ khám phá cách sử dụng Puppeteer, một thư viện Node.js, để web scraping, phát hiện các thay đổi trên trang web và chụp ảnh màn hình những thay đổi đó.
Puppeteer là một thư viện Node.js cung cấp API cấp cao để kiểm soát Chrome hoặc Chromium không có đầu qua giao thức DevTools. Nó có thể được sử dụng cho web scraping, thử nghiệm tự động, hoặc thậm chí tạo ảnh chụp màn hình và PDF của trang web.
Trước khi bắt đầu, hãy đảm bảo bạn đã cài đặt những thứ sau:
Bạn có thể cài đặt Puppeteer bằng cách chạy lệnh sau trong terminal của mình:
npm install puppeteer
Để bắt đầu, chúng ta hãy tạo một web scraper cơ bản điều hướng đến một trang web và trích xuất nội dung văn bản.
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
// Điều hướng đến trang web
await page.goto('https://example.com');
// Trích xuất nội dung văn bản
const content = await page.evaluate(() => {
return document.querySelector('h1').innerText;
});
console.log('Nội dung trang:', content);
await browser.close();
})();
Kịch bản này mở một trình duyệt không có đầu, điều hướng đến example.com và trích xuất văn bản từ phần tử <h1>. Bạn có thể thay thế URL bằng trang web bạn muốn scraping và điều chỉnh bộ chọn để phù hợp với phần tử bạn quan tâm.
Puppeteer cho phép bạn chụp ảnh màn hình của các trang web một cách dễ dàng. Bạn có thể chụp ảnh màn hình toàn trang hoặc các khu vực cụ thể trên trang.
Dưới đây là cách chụp ảnh màn hình toàn trang:
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
// Điều hướng đến trang web
await page.goto('https://example.com');
// Chụp ảnh màn hình toàn trang
await page.screenshot({ path: 'screenshot.png', fullPage: true });
await browser.close();
})();
Kịch bản này lưu ảnh chụp màn hình của toàn bộ trang dưới dạng screenshot.png. Bạn có thể sửa đổi path để chỉ định tên tệp hoặc vị trí khác.
Theo dõi thay đổi trên trang web là một tính năng hữu ích trong web scraping. Bạn có thể đạt được điều này bằng cách liên tục kiểm tra nội dung của trang web và so sánh nó với phiên bản đã lưu trước đó.
Dưới đây là một ví dụ về việc phát hiện thay đổi văn bản và chụp ảnh màn hình nếu nội dung thay đổi:
const puppeteer = require('puppeteer');
const fs = require('fs');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
// Điều hướng đến trang web
await page.goto('https://example.com');
// Trích xuất nội dung văn bản
const currentContent = await page.evaluate(() => {
return document.querySelector('h1').innerText;
});
const previousContentPath = 'previous-content.txt';
let previousContent = '';
// Kiểm tra xem nội dung trước đó có tồn tại hay không
if (fs.existsSync(previousContentPath)) {
previousContent = fs.readFileSync(previousContentPath, 'utf8');
}
// So sánh nội dung hiện tại với nội dung trước đó
if (currentContent !== previousContent) {
console.log('Nội dung đã thay đổi!');
// Lưu nội dung mới
fs.writeFileSync(previousContentPath, currentContent);
// Chụp ảnh màn hình về sự thay đổi
await page.screenshot({ path: `screenshot-${Date.now()}.png`, fullPage: true });
console.log('Ảnh chụp màn hình đã được lưu!');
} else {
console.log('Không phát hiện thay đổi.');
}
await browser.close();
})();
Trong ví dụ này:
<h1>.previous-content.txt).previous-content.txt để so sánh trong tương lai.Bạn có thể sử dụng Node.js để lên lịch cho kịch bản này chạy theo khoảng thời gian bằng cách sử dụng gói node-cron.
Đầu tiên, cài đặt node-cron:
npm install node-cron
Bây giờ, hãy sửa đổi kịch bản của bạn để chạy theo khoảng thời gian đã đặt (ví dụ: cứ 5 phút một lần):
const puppeteer = require('puppeteer');
const fs = require('fs');
const cron = require('node-cron');
cron.schedule('*/5 * * * *', async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://example.com');
const currentContent = await page.evaluate(() => {
return document.querySelector('h1').innerText;
});
const previousContentPath = 'previous-content.txt';
let previousContent = '';
if (fs.existsSync(previousContentPath)) {
previousContent = fs.readFileSync(previousContentPath, 'utf8');
}
if (currentContent !== previousContent) {
console.log('Nội dung đã thay đổi!');
fs.writeFileSync(previousContentPath, currentContent);
await page.screenshot({ path: `screenshot-${Date.now()}.png`, fullPage: true });
console.log('Ảnh chụp màn hình đã được lưu!');
} else {
console.log('Không phát hiện thay đổi.');
}
await browser.close();
});
Kịch bản này sẽ chạy cứ sau 5 phút (*/5 * * * *) và kiểm tra xem có thay đổi nào trên trang web hay không. Nếu phát hiện thay đổi, nó sẽ chụp ảnh màn hình và ghi nhật ký cập nhật.
Nhận Mã thưởng của bạn cho các giải pháp captcha hàng đầu tại CapSolver: scrape. Sau khi đổi mã, bạn sẽ nhận được thêm 5% tiền thưởng sau mỗi lần nạp tiền, không giới hạn lần.

Puppeteer là một công cụ mạnh mẽ cho web scraping và tự động hóa các tác vụ trình duyệt. Trong bài đăng này, chúng ta đã chứng minh cách sử dụng Puppeteer cho web scraping cơ bản, phát hiện thay đổi trang web và chụp ảnh màn hình những thay đổi đó. Với những kỹ thuật này, bạn có thể theo dõi các trang web và theo dõi các cập nhật một cách tự động. Hãy chắc chắn kiểm tra chính sách web scraping để tránh vi phạm các điều khoản dịch vụ.
Hướng dẫn Captcha cho quy trình dữ liệu được phê duyệt: học về các loại thách thức, xử lý API, tính nhất quán của proxy, lần thử lại và sử dụng có trách nhiệm.

API giải CAPTCHA nhanh chóng dành cho tự động hóa: so sánh quy trình token, các thách thức được hỗ trợ, kiểm tra độ trễ và tích hợp CapSolver có trách nhiệm.
