CAPSOLVER
Blog
Lấy dữ liệu từ web bằng Puppeteer: Phát hiện thay đổi trang web và chụp ảnh màn hình

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

Logo of CapSolver

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 Copy
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 Copy
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 Copy
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 Copy
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 Copy
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 Copy
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ụ.

Copy

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
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!

Logo of CapSolver

Anh Tuan

25-Apr-2025

Các User Agent Tốt Nhất để Scrape Web & Cách Sử Dụng Chúng
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.

Logo of CapSolver

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
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.

Cloudflare
Logo of 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
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.

Cloudflare
Logo of CapSolver

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ạ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ả.

Logo of CapSolver

Anh Tuan

27-Feb-2025

Cách trích xuất dữ liệu từ trang web được bảo vệ bởi Cloudflare
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.

Cloudflare
Logo of CapSolver

Anh Tuan

20-Feb-2025