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%のコンプライアンスを確保しながら、ユーザーエクスペリエンスを向上させます。私たちは、サービスの責任ある使用を奨励します。詳細については、サービス利用規約およびプライバシーポリシーをご覧ください。
もっと見る

ウェブスクレイピングのブロックの対処法: 実用的な方法
ウェブスクレイピングのブロックを効果的に対処する方法を学びましょう。実用的な方法、ボット検出に関する技術的な洞察、およびデータ抽出のための信頼性の高いソリューションを発見してください。

Ethan Collins
03-Apr-2026

CAPTCHA 解消 API の応答時間を最適化して、より高速なオートメーションを実現する
高速で信頼性の高いオートメーションのために、CAPTCHA解決APIの応答時間を最適化する方法を学びましょう。このガイドでは、CAPTCHAの複雑さ、APIのパフォーマンス、ポーリング戦略などの重要な要因をカバーし、CapSolverを使用した実践的なヒントで10秒未満の解決時間を実現します。

Sora Fujimoto
03-Apr-2026

ウェブスクレイピング検出回避技術: 安定したデータ抽出
ウェブスクレイピングの検出を回避する技術をマスターして、安定したデータ抽出を確保してください。IPローテーション、ヘッダー最適化、ブラウザファイngerprint、およびCAPTCHAの解決方法を使用して、検出を回避する方法を学びましょう。

Anh Tuan
03-Apr-2026

CAPTCHA解決API対手動解決: コストと効率 (2026年)
CAPTCHAを解くAPIと手動による解決を比較してみましょう。コスト、スピード、効率について学びましょう。なぜCapSolverのようなAIを搭載したAPIが自動化のための最適な選択肢なのかを発見しましょう。

Adélia Cruz
03-Apr-2026

CAPTCHAを解くAPIの応答時間の説明:スピードとパフォーマンスの要因
CAPTCHAを解くAPIの応答時間、自動化への影響、および速度に影響を与える主要な要因を理解する。パフォーマンスを最適化する方法を学び、迅速なCAPTCHA解決のために効率的なソリューション(例: CapSolver)を活用する方法を学ぶ。

Emma Foster
03-Apr-2026

CAPTCHAを解くAPIとは? 仕組みと使用するタイミング
CAPTCHAを解くAPIとは何か、どのように機能するか、そして自動化にいつ使うかを学びましょう。ウェブスクラピングにおけるAIを活用したCAPTCHA解決の利点を発見してください。

Sora Fujimoto
02-Apr-2026

