Puppeteer を使ったウェブスクレイピング:ウェブサイトの変更を検知してスクリーンショットを撮る

Aloísio Vítor
Image Processing Expert
27-Sep-2024

ウェブスクレイピングは、ウェブサイトの変更を監視してデータ収集を自動化するのに不可欠なツールになっています。このブログ記事では、PuppeteerというNode.jsライブラリを使用して、ウェブスクレイピング、ウェブサイトの変更の検出、およびこれらの変更のスクリーンショットを取得する方法について説明します。
Puppeteerとは?
Puppeteerは、DevToolsプロトコルを介してヘッドレスChromeまたはChromiumを制御するための高レベルAPIを提供するNode.jsライブラリです。ウェブスクレイピング、自動テスト、さらにはウェブページのスクリーンショットやPDFの生成に使用できます。
事前準備
始める前に、以下がインストールされていることを確認してください。
ターミナルで次のコマンドを実行してPuppeteerをインストールできます。
bash
npm install puppeteer
Puppeteerを使用した基本的なウェブスクレイピング
まずは、ウェブサイトにアクセスしてテキストコンテンツを抽出する基本的なウェブスクレーパーを作成しましょう。
javascript
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
// ウェブサイトに移動
await page.goto('https://example.com');
// テキストコンテンツを抽出
const content = await page.evaluate(() => {
return document.querySelector('h1').innerText;
});
console.log('ページコンテンツ:', content);
await browser.close();
})();
このスクリプトは、ヘッドレスブラウザを開き、example.comに移動し、<h1>要素からテキストを抽出します。URLをスクレイピングするウェブサイトに置き換え、セレクトを対象の要素に合わせて調整できます。
Puppeteerを使用したスクリーンショットの取得
Puppeteerを使用すると、ウェブページのスクリーンショットを簡単に取得できます。ページ全体のスクリーンショットまたはページの特定の領域をキャプチャできます。
ページ全体のスクリーンショットを取得する方法は次のとおりです。
javascript
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
// ウェブサイトに移動
await page.goto('https://example.com');
// ページ全体のスクリーンショットを取得
await page.screenshot({ path: 'screenshot.png', fullPage: true });
await browser.close();
})();
このスクリプトは、ページ全体のスクリーンショットをscreenshot.pngとして保存します。pathを変更して、異なるファイル名または場所を指定できます。
ウェブサイトの変更の検出
ウェブサイトの変更を監視することは、ウェブスクレイピングで便利な機能です。これを実現するには、ウェブサイトのコンテンツを繰り返しチェックし、以前に保存したバージョンと比較します。
テキストの変更を検出して、コンテンツが変更された場合にスクリーンショットを取得する例を次に示します。
javascript
const puppeteer = require('puppeteer');
const fs = require('fs');
(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('コンテンツが変更されました!');
// 新しいコンテンツを保存
fs.writeFileSync(previousContentPath, currentContent);
// 変更のスクリーンショットを取得
await page.screenshot({ path: `screenshot-${Date.now()}.png`, fullPage: true });
console.log('スクリーンショットが保存されました!');
} else {
console.log('変更は検出されませんでした。');
}
await browser.close();
})();
この例では:
- スクリプトは
<h1>要素のコンテンツを抽出します。 - 現在のコンテンツを以前に保存したバージョン(
previous-content.txt)と比較します。 - 変更が検出されると、スクリーンショットを取得してファイル名にタイムスタンプを付加して保存します。これにより、各スクリーンショットがユニークになります。
- 新しいコンテンツは、将来の比較のために
previous-content.txtに保存されます。
スクリプトの定期的な実行のスケジュール設定
node-cronパッケージを使用して、Node.jsでこのスクリプトを一定の間隔で実行するようにスケジュール設定できます。
まず、node-cronをインストールします。
bash
npm install node-cron
次に、スクリプトを変更して、設定された間隔(例:5分ごと)で実行します。
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('コンテンツが変更されました!');
fs.writeFileSync(previousContentPath, currentContent);
await page.screenshot({ path: `screenshot-${Date.now()}.png`, fullPage: true });
console.log('スクリーンショットが保存されました!');
} else {
console.log('変更は検出されませんでした。');
}
await browser.close();
});
このスクリプトは、5分ごと(*/5 * * * *)に実行され、ウェブサイトの変更をチェックします。変更が検出されると、スクリーンショットを取得して更新をログに記録します。
ボーナスコード
CapSolverでトップのキャプチャソリューションのボーナスコードを獲得しましょう:scrape。コードを引き換えると、リチャージごとに5%のボーナスが追加で付与されます。無制限です。

まとめ
Puppeteerは、ウェブスクレイピングとブラウザタスクの自動化に強力なツールです。この記事では、Puppeteerを使用して基本的なウェブスクレイピング、ウェブサイトの変更の検出、およびこれらの変更のスクリーンショットを取得する方法を説明しました。これらのテクニックを使用すると、ウェブサイトを監視し、更新を自動的に追跡できます。ウェブサイトのスクレイピングポリシーを確認して、利用規約に違反しないようにしてください。
コンプライアンス免責事項: このブログで提供される情報は、情報提供のみを目的としています。CapSolverは、すべての適用される法律および規制の遵守に努めています。CapSolverネットワークの不法、詐欺、または悪用の目的での使用は厳格に禁止され、調査されます。私たちのキャプチャ解決ソリューションは、公共データのクローリング中にキャプチャの問題を解決する際に100%のコンプライアンスを確保しながら、ユーザーエクスペリエンスを向上させます。私たちは、サービスの責任ある使用を奨励します。詳細については、サービス利用規約およびプライバシーポリシーをご覧ください。
もっと見る

CAPTCHA 2026を解くために最適な拡張機能はどれですか?
オンラインセキュリティの進化し続ける世界において、CAPTCHAのチャレンジはインターネットユーザーにとって一般的な障壁となっています...

Nikolai Smirnov
12-Dec-2025

Sample Post
この記事では、Lumiproxyとは何か、および提供しているサービスについて紹介します。

Nikolai Smirnov
12-Dec-2025

Genlogin: 革新するウェブ自動化体験
この記事では、Genloginおよびその提供するサービスについてご紹介します。

Sora Fujimoto
12-Dec-2025

プロクシーズ.io : 個別のプロキシ あらゆるタスクに
本記事では、Proxys.ioとは何なのかと、彼らが提供するサービスについてご紹介します。

Nikolai Smirnov
12-Dec-2025

タブプロキシ: お得な海外住宅用プロキシ
この記事では、Tabproxyとは何か、および彼らが提供するサービスについてご紹介します。

Anh Tuan
12-Dec-2025

IP2World 住宅用プロキシ: リーディンググローバルIPプロキシソリューション
本記事では、IP2Worldとは何かおよび提供するサービスについてご紹介します。

Ethan Collins
12-Dec-2025

