動的サイトをスクレイピング可能な「PhantomJS」と「CasperJS」をレンタルサーバーで使う方法

動的サイトをスクレイピング可能な「PhantomJS」と「CasperJS」をレンタルサーバーで使う方法

はじめに

対象読者

  • 動的サイトをJavascriptを使ってスクレイピングしたい人
  • レンタルサーバーでPhantomJS+CasperJSを動かしたい人
  • 基本的なターミナルのコマンド(cdやls)を使える人

PhantomJSとは

WebkitベースのHeadlessブラウザです。スクレイピングの際にWEBページを読み込むブラウザとなります。
npmパッケージが配付されていますが、PhantomJSはNode.jsモジュールではないので注意しましょう。

CasperJSとは

PhantomJSとJavascriptを用いてスクレイピングを行うアプリケーションです
動的ページの読み込み、WEBページのキャプチャ、要素のクリックなどの制御が可能です。

他のスクレイピングツールで動的ページのスクレイピングに失敗する場合に導入すると良いでしょう。
npmパッケージが配付されていますが、CasperJSはNode.jsモジュールではないので注意しましょう。

ユーザーディレクトリにインストール

この記事では、レンタルサーバーなどroot権限のない環境でも動作するよう、
ユーザーディレクトリ以下にnpmを使ってインストールする方法
をご紹介します。
OSはLinuxを想定して解説します。

npmでユーザーディレクトリにインストール

Node.jsのインストール

root権限はないという想定なので、
nodeとnpmについてもユーザーディレクトリに直接インストールします

公式ページから、最新のBinaryパッケージをダウンロードしてユーザーディレクトリに解凍しましょう。
解凍したフォルダは、シンプルな名前「node」にリネームしておきましょう。

ターミナルから、

export PATH=$PATH:~/node/bin/

として環境変数$PATHにnodeコマンドとnpmコマンドへのパスを通し、

node -v
npm -v

としてそれぞれのバージョンが表示されればインストールは成功です。

Nodeプロジェクトの初期化

ユーザーディレクトリ以下に任意のディレクトリ(今回はapp)を作成します。
このディレクトリ上で、

npm init

として、package.jsonを作成します。このとき対話式でいくつか質問をされますが、ENTERを押して飛ばしてOKです。

npmでPhantomJSとCasperJSをインストール

ユーザーディレクトリ以下に作成した、appディレクトリ上にpackage.jsonがある状態で、

npm install phantomjs casperjs

とすると、node_moduleフォルダが作成され、
その中にphantomjs,casperjsと依存モジュールがダウンロードされます。

~/app/node_modules/phantomjs/bin/phantomjs -v

としてみて、バージョンが表示されればphantomjsのインストールは成功です。

次に、

env PATH=$PATH:~/app/node_modules/phantomjs/bin/ ~/app/node_modules/casperjs/bin/casperjs --version

としてみて、バージョンが表示されればcasperjsのインストールは成功です。
casperjsはphantomjsを利用するので、
このように実行前に環境変数PATHにphantomjsのパスを追加する必要があります。

npmスクリプトで実行する方法

package.jsonの”scripts”の箇所に、

{
  "scripts": {
    "start": "casperjs --version"
  }
}

のようにcasperjsの実行コマンドを記入し、

npm start

とすると、node_module内部のコマンドへパスが自動で追加されるため、
環境変数にphantomjsやcasperjsへのパスを追加せずに済みます。

サンプルで動作確認

CasperJSにはサンプルプログラムが同梱されているので、これを用いてきちんと動作するか確認してみましょう。
package.jsonのnpmスクリプト部分を、

{
  "scripts": {
     "start": "casperjs ~/app/node_modules/casperjs/samples/googlepagination.js apple"
  }
}

のように編集したら、

npm start

で実行します。

このサンプルプログラムは、引数に検索キーワードを渡すと、google検索の上位5ページをキャプチャして保存するというものになっています。
実行したディレクトリに、キャプチャ画像が作成されれば成功です。

cronでスケジュール実行

このようなスクレイピングプログラムを、レンタルサーバー上で自動実行させるには、
cronと呼ばれる定期実行プログラムを利用するのが一般的です。
cronに対応しているレンタルサーバーはいくつかありますが、

追加料金なし、かつ回数無制限にcronを利用できるのは、
本サイトでもお世話になっている、エックスサーバーのみです。
親切なことに、サーバーパネル画面からcron設定を行えるようになっているので、初心者にも最もやさしい方法でしょう。
もし、自動でスクレイピング定期実行したいと言う方はぜひチェックしてみてください。



WEBプログラミング入門カテゴリの最新記事