[Chrome自動化]Node.js,Puppeteerを利用したWebスクレイピング

プログラミング

Puppeteerを利用したWebスクレイピングについて記載します。

Puppeteerとは

Puppeteerは、Googleが開発した、DevTools Protocolを通じてヘッドレスChromeを制御できるNode.jsライブラリです。

Selenium WebdriverやPhantomJSのようなブラウザ拡張を必要とせず、ヘッドレスChromeやChromebitデバイスを使って、アプリケーションのテストを自動化するためのツールとして知られています。

Puppeteerは、Webアプリケーションのテストを自動化することができます。

スクレイピングができるツールとして広く使用されています。

Puppeteerのgithubページ

GitHub - puppeteer/puppeteer: Node.js API for Chrome
Node.js API for Chrome . Contribute to puppeteer/puppeteer development by creating an account on GitHub.

Puppeteerで出来る事

Puppeteerで出来る事を簡単にまとめておきます

  • 最新の自動テスト環境を構築可能。最新バージョンのChromeで、最新のJavaScriptとブラウザの機能を使って、テストを直接実行可能。
  • ページのスクリーンショットとPDFを生成。
  • SPA(シングルページアプリケーション)をクロールし、プリレンダリングコンテンツを生成(SSR(サーバーサイドレンダリング))。
  • フォーム送信、UIテスト、キーボード入力などのアクションを自動化。

Puppeteerを使えば、普段、Chromeを使ってインターネットで情報収集をしていたり、データをまとめていたりする作業を自動化することが出来るようになります。

Puppeteerインストール

PuppeteerはNode.jsのライブラリのため、node.jsが必要です。

まだインストールできていない場合は、Node.jsをインストールしてください。

Node.jsとNPM(管理パッケージ)のインストール
Node.jsとNPMのインストール方法について記載します。 Node.jsとNPMとは Node.jsは、 JavaScript で記述されたプログラムを実行するために必要なランタイム環境のことです。 サーバー上でJav...

それでは、puppeteerのインストールを始めましょう。

ターミナルソフトでnpm install puppeteerと入力し,Enterを押してください。

$ npm install puppeteer
added 48 packages, and audited 348 packages in 1m
66 packages are looking for funding
run npm fund for details
found 0 vulnerabilities

これでインストールは完了です。非常に簡単ですね。

Puppeteerの使い方

次にPuppeteerの使い方について記載します。

Visual Studio Codeなどのエディタでtest.jsファイルを作成しましょう。

最低限必要な設定

デフォルトの設定は下記のような形になります。

コードの内容

  1. Puppeteerライブラリをインストールし、launch関数にて各種設定
  2. ブラウザを開く
  3. Chromeで対象のページを開く(下記例ではgoogle.comを指定)
  4. ブラウザを閉じる

Puppeteer基本的なコマンド

次にPuppeteerの代表的なコマンド(コード)を紹介します。

新しいブラウザを開く

表示しているタイトルはtitleファンクションで取得できます。

クリック

clickファンクションでクリックしたい要素を指定してクリック出来ます。

表示しているページタイトルの取得

表示しているタイトルはtitleファンクションで取得できます。

表示しているページのURLを取得

表示しているページのURLはurlファンクションで取得できます。

表示しているページのソースコードを取得

表示しているページのソースコードはcontentファンクションで取得できます。

要素のテキストを取得

要素のテキストは、取得したい要素をまず取得し、その後getPropertyファンクションにtextContentを指定し、jsonValueファンクションで取得可能です。

要素の属性取得方法

取得したい要素の属性はgetAttributeで取得可能です。

要素の取得方法 1つのクエリセレクターの1つの要素を取る

1つのクエリから一つの要素のみ取りたい場合は、下記で可能です。

複数要素がある場合は、一番初めに表示されている要素のみ取得されます。

要素の取得方法 1つのクエリセレクターの複数の要素を取る

複数の要素を取得したい場合は、$$ファンクションで取得可能です

同期処理

puppeteerはasync関数内で非同期で処理が進みます。

ページを遅らせたい、時間をある程度待ちたいなどの場合は、同期処理が必要になります。

waitForファンクションで時間を指定することによって指定時間処理を待つことが出来ます。

時間の単位はミリセックです。

キーボードを動かす

キーボードも利用する事が出来ます。下記例ではEnterコマンドを押す例を示しています。

よく使うコード集(実用例)

実際に私がスクレイピングする際によく使うコードをまとめてみました。

Google検索結果の1番目の結果を取得

Googleで検索したい内容を検索し、ページ一番目に取得した内容を取得するコードは下記のとおりです。

Google検索結果のタイトルとURLを取得

Googleで検索したい内容を検索し、検索結果に表示されたすべてのタイトルとURLをリスト化して表示するコードは下記のとおりです。

Google画像検索結果を一つづつクリックして保存

Googleで画像検索し、一つづつ画像をPCへ保存したい場合のコードは下記のとおりです。

下記例では、Google画像検索で表示された画像を1番目から15番目の画像を保存するコードとなります。

Google翻訳に文字を入力して、翻訳結果を格納

Google翻訳に文字を入力して、翻訳結果を取得するコードは下記のとおりです。

ページのコピペ

表示されているページをコピペするコードは下記のとおりです。

ワードプレスへAPI接続

ワードプレスへAPI接続し、自動で投稿するコードは下記のとおりです。

ワードプレスサーバー側でAPIの設定および独自のワードプレスライブラリを作成する必要があります(パスワード設定やhtaccessの設定など)

Puppeteerを利用してスクレイピングする上で注意する事

最後にPuppeteerを利用するうえで注意するべき2点を記載しておきます

1.スクレイピングをしても問題ないかどうか利用規約を確認する

スクレイピングは動作によっては、対象のページのサーバーに負荷を与えるものです。

スクレイピングしたい対象のサイトでスクレイピングをしても問題ないか確認してから行うようにしましょう。

また利用できたとしても、極力負荷がかからないようにコードを作成してスクレイピングするようにしましょう。

2.Chrome historyが肥大化する可能性があるため、定期的に消す

PuppeteerでスクレイピングをしているとChromeのhistoryが肥大化してChromeの動作が非常に重くなることがあります。実際私はよくこの状況になります。

スクレイピングをしてChrome処理を自動化、長期間使用していると、historyのサイズが10GB以上になることなんてざらにあります。

定期的にChrome履歴を消すようにしましょう。

実際に手で消すことも可能ですが、バッチファイルで自動化して消すことも可能です。

以下にchromeヒストリーをバッチファイルで消すバッチファイルのソースコード例も記載しておきます。

 

タイトルとURLをコピーしました