Web Scraping với Puppeteer: Phát hiện thay đổi website và chụp ảnh màn hình

Anh Tuan
Data Science Expert
07-Oct-2024

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à gì?
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.
Điều kiện tiên quyết
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:
bash
npm install puppeteer
Web scraping cơ bản với 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.
javascript
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.
Chụp ảnh màn hình với Puppeteer
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:
javascript
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.
Phát hiện thay đổi trang web
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:
javascript
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:
- Kịch bản trích xuất nội dung của phần tử
<h1>
. - Nó so sánh nội dung hiện tại với phiên bản đã lưu trước đó (
previous-content.txt
). - Nếu phát hiện thay đổi, nó sẽ chụp ảnh màn hình và lưu nó với dấu thời gian trong tên tệp, đảm bảo mỗi ảnh chụp màn hình là duy nhất.
- Nội dung mới được lưu vào
previous-content.txt
để so sánh trong tương lai.
Lên lịch cho scraper chạy thường xuyên
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
:
bash
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):
javascript
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.
Mã thưởng
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.

Kết luậ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ụ.
Tuyên bố Tuân thủ: Thông tin được cung cấp trên blog này chỉ mang tính chất tham khảo. CapSolver cam kết tuân thủ tất cả các luật và quy định hiện hành. Việc sử dụng mạng lưới CapSolver cho các hoạt động bất hợp pháp, gian lận hoặc lạm dụng là hoàn toàn bị cấm và sẽ bị điều tra. Các giải pháp giải captcha của chúng tôi nâng cao trải nghiệm người dùng trong khi đảm bảo tuân thủ 100% trong việc giúp giải quyết các khó khăn về captcha trong quá trình thu thập dữ liệu công khai. Chúng tôi khuyến khích việc sử dụng dịch vụ của chúng tôi một cách có trách nhiệm. Để biết thêm thông tin, vui lòng truy cập Điều khoản Dịch vụ và Chính sách Quyền riêng tư.
Thêm

Nhận dạng ảnh bằng AI: Kiến thức cơ bản và cách giải quyết
Tạm biệt những khó khăn với CAPTCHA hình ảnh – CapSolver Vision Engine giải quyết chúng nhanh chóng, thông minh và dễ dàng!

Anh Tuan
25-Apr-2025

Các User Agent Tốt Nhất để Scrape Web & Cách Sử Dụng Chúng
Hướng dẫn về các user agent tốt nhất để scrape web và cách sử dụng hiệu quả để tránh bị phát hiện. Khám phá tầm quan trọng của user agent, các loại và cách triển khai chúng để scrape web liền mạch và không bị phát hiện.

Anh Tuan
07-Mar-2025

Cách giải quyết thử thách Cloudflare JS để thu thập dữ liệu web và tự động hóa
Tìm hiểu cách giải quyết thử thách JavaScript của Cloudflare để thu thập dữ liệu web và tự động hóa liền mạch. Khám phá các chiến lược hiệu quả, bao gồm sử dụng trình duyệt không đầu, luân phiên proxy, và tận dụng khả năng giải quyết CAPTCHA nâng cao của CapSolver.

Anh Tuan
05-Mar-2025

Dấu vân tay TLS của Cloudflare: Nó là gì và cách giải quyết
Tìm hiểu về việc Cloudflare sử dụng dấu vân tay TLS để bảo mật, cách nó phát hiện và chặn bot, và khám phá các phương pháp hiệu quả để giải quyết vấn đề này cho các tác vụ thu thập dữ liệu web và duyệt web tự động.

Anh Tuan
28-Feb-2025

Tại sao tôi cứ bị yêu cầu xác minh rằng tôi không phải là người máy?
Tìm hiểu lý do tại sao Google yêu cầu bạn xác minh rằng bạn không phải là robot và khám phá các giải pháp như sử dụng API của CapSolver để giải quyết các thử thách CAPTCHA một cách hiệu quả.

Anh Tuan
27-Feb-2025

Cách trích xuất dữ liệu từ trang web được bảo vệ bởi Cloudflare
Trong hướng dẫn này, chúng ta sẽ khám phá các kỹ thuật đạo đức và hiệu quả để trích xuất dữ liệu từ các trang web được bảo vệ bởi Cloudflare.

Anh Tuan
20-Feb-2025