Web スクレイピングは、Web サイトからデータを収集するための非常に強力なツールです。 Node.js 用の Google のヘッドレス ブラウザ ライブラリである Puppeteer を使用すると、人間のブラウジング動作を模倣しながら、ページの移動、ボタンのクリック、情報の抽出のプロセスを自動化できます。このガイドでは、Puppeteer を使用した Web スクレイピングの基本を、シンプル、明確、実用的な方法で説明します。
Puppeteer は、Google Chrome (または Chromium) のヘッドレス バージョンを制御できる Node.js ライブラリです。ヘッドレス ブラウザはグラフィカル ユーザー インターフェイス (GUI) なしで実行されるため、高速になり、スクレイピングなどの自動化タスクに最適です。ただし、何が起こっているかを視覚的に確認する必要がある場合は、Puppeteer をフルブラウザ モードで実行することもできます。
柔軟性: Puppeteer は、動的な Web サイトやシングルページ アプリケーション (SPA) を簡単に処理します。
JavaScript のサポート: ページ上で JavaScript を実行します。これは、最新の Web アプリをスクレイピングするために不可欠です。
自動化機能: フォームへの記入、ボタンのクリック、スクリーンショットの撮影などのタスクを実行できます。
Web サイトをスクレイピングする場合、IP 禁止を回避し、地理的に制限されたコンテンツにアクセスするには、プロキシが不可欠です。プロキシはスクレイパーとターゲット Web サイトの間の仲介者として機能し、実際の IP アドレスをマスクします。 Puppeteer の場合、プロキシを起動引数として渡すことで簡単に統合できます:
JavaScript
コードをコピー
const browser = await puppeteer.launch({
引数: ['--proxy-server=あなたのプロキシサーバー:ポート']
});
プロキシは、スクレイピング作業をスケールするのに特に役立ちます。プロキシをローテーションすることで、各リクエストが異なる IP から送信されるようになり、検出の可能性が低くなります。信頼性が高いことで知られる住宅用プロキシはボット防御を回避するのに優れていますが、データセンター プロキシは高速で手頃な価格です。スクレイピングのニーズに合ったタイプを選択し、常にパフォーマンスをテストして信頼性を確保してください。
スクレイピングを開始する前に、Puppeteer をセットアップする必要があります。段階的なプロセスを見てみましょう:
ステップ 1: Node.js と Puppeteer をインストールする
Node.js のインストール: 公式 Web サイトから Node.js をダウンロードしてインストールします。
Puppeteer のセットアップ: ターミナルを開いて次のコマンドを実行します:
バッシュ
コードをコピー
npm install puppeteer
これにより、Puppeteer と、それが制御するブラウザである Chromium がインストールされます。
ステップ 2: 最初の人形遣いスクリプトを作成する
新しい JavaScript ファイル、scraper.js を作成します。これにはスクレイピング ロジックが格納されます。 Web ページを開いてそのタイトルを抽出する簡単なスクリプトを書いてみましょう:
JavaScript
コードをコピー
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
// Web サイトに移動します
await page.goto('https://example.com');
// タイトルを抽出します
const title = await page.title();
console.log(ページタイトル: ${title});
ブラウザを待つ.close();
})();
以下を使用してスクリプトを実行します:
バッシュ
コードをコピー
ノードスクレーパー.js
これで、初めての Puppeteer スクレイパーが作成されました!
基本を理解したので、スクレイピングに使用するいくつかの主要な Puppeteer 機能を見てみましょう。
ページへの移動
page.goto(url) メソッドを使用すると、任意の URL を開くことができます。必要に応じて、タイムアウト設定などのオプションを追加します:
JavaScript
コードをコピー
await page.goto('https://example.com', { タイムアウト: 60000 });
要素の選択
CSS セレクターを使用して、ページ上の要素を正確に指定します。 Puppeteer は次のようなメソッドを提供します:
最初の一致の page.$(selector)
すべての一致に対する page.$$(selector)
例:
JavaScript
コードをコピー
const 要素 = await page.$('h1');
const text = await page.evaluate(el => el.textContent, element);
console.log(見出し: ${text});
要素との対話
クリックや入力などのユーザー操作をシミュレートします:
JavaScript
コードをコピー
await page.click('#submit-button');
await page.type('#search-box', '人形遣いのスクレイピング');
要素を待機中
Web ページの読み込み速度は異なります。 Puppeteer では、続行する前に要素を待つことができます:
JavaScript
コードをコピー
await page.waitForSelector('#dynamic-content');
スクリーンショットを撮る
視覚的なデバッグやデータを画像として保存するのは簡単です:
JavaScript
コードをコピー
await page.screenshot({ path: 'screenshot.png', fullPage: true });
現在、多くの Web サイトでは JavaScript を使用してコンテンツを動的に読み込みます。ここで Puppeteer が優れているのは、JavaScript を実行し、ページのソースに表示されない可能性のあるコンテンツをスクレイピングできるためです。
例: 動的データの抽出
JavaScript
コードをコピー
await page.goto('https://news.ycombinator.com');
await page.waitForSelector('.storylink');
constHeadings = await page.$$eval('.storylink', links => links.map(link => link.textContent));
console.log('見出し:', 見出し);
一部の Web サイトでは、ボットをブロックするための措置を講じています。 Puppeteer は簡単なチェックを回避するのに役立ちます:
ステルス モードを使用する: puppeteer-extra プラグインをインストールします:
バッシュ
コードをコピー
npm install puppeteer-extra puppeteer-extra-plugin-stealth
それをスクリプトに追加します:
JavaScript
コードをコピー
const puppeteer = require('puppeteer-extra');
const StealthPlugin = require('puppeteer-extra-plugin-stealth');
puppeteer.use(StealthPlugin());
人間の動作を模倣: マウスの動きや入力速度などの動作をランダム化して、より人間らしく見えるようにします。
ユーザー エージェントのローテーション: リクエストごとにブラウザのユーザー エージェントを変更します:
JavaScript
コードをコピー
await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64)');
データを抽出したら、保存する必要があるでしょう。一般的な形式をいくつか示します:
JSON:
JavaScript
コードをコピー
const fs = require('fs');
const data = { 名前: '人形遣い'、タイプ: 'ライブラリ' };
fs.writeFileSync('data.json', JSON.stringify(data, null, 2));
CSV: csv-writer:
のようなライブラリを使用します。
バッシュ
コードをコピー
npm install csv-writer
JavaScript
コードをコピー
const createCsvWriter = require('csv-writer').createObjectCsvWriter;
const csvWriter = createCsvWriter({
パス: 'data.csv',
ヘッダー: [
{ id: '名前', title: '名前' },
{ id: 'タイプ'、タイトル: 'タイプ' }
]
});
const records = [{ name: 'Puppeteer', type: 'library' }];
csvWriter.writeRecords(records).then(() => console.log('CSV ファイルが書き込まれました。'));
倫理的なウェブスクレイピングの実践
Web サイトをスクレイピングする前に、次の倫理ガイドラインに留意してください:
利用規約を確認してください: Web サイトでスクレイピングが許可されていることを必ず確認してください。
レート制限を尊重する: 短時間に大量のリクエストを送信しないようにします。 setTimeout または Puppeteer の page.waitForTimeout() を使用してリクエストの間隔を空けます:
JavaScript
コードをコピー
await page.waitForTimeout(2000); // 2秒待ちます
機密データを避ける: 個人情報や個人情報を決して収集しないでください。
ページが正しく読み込まれません: より長いタイムアウトを追加するか、フル ブラウザ モードを有効にしてみてください:
JavaScript
コードをコピー
const browser = await puppeteer.launch({ headless: false });
セレクターが機能しない: ブラウザー開発者ツール (Ctrl Shift C) を使用して Web サイトを検査し、セレクターを確認します。
CAPTCHA によってブロックされています: ステルス プラグインを使用し、人間の動作を模倣します。
以上がPuppeteer を使用して Web スクレイピングを行う方法: 初心者向けガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。