CasperJSは、PhantomJSをより簡潔な記述により操作可能にしたユーティリティである。PhantomJS は、「ヘッドレスブラウザ」と呼ばれるグラフィカルな画面のないブラウザ「WebKit」で、JavaScript APIによりコマンドラインからブラウザの機能を使うことができ、フォームの操作やページの要素を取得することができます。よくCI ツールと組み合わせて自動テストを行ったり Web スクレイピングで使われたりします。Webkitは、SafariブラウザやChromeブラウザに使用されている。
ここでは、Raspberry Pi 3にcasperjsをインストールして、スクレイピングできる環境を構築します。
Raspberry Pi 3にcasperjsのインストール
次のコマンドでcasperjsをインストールし、casperjsをどこからでも実行できるようにリンクを張ります。
$ git clone git://github.com/n1k0/casperjs.git $ cd casperjs $ sudo ln -sf `pwd`/bin/casperjs /usr/local/bin/casperjs
次のコマンドでphantomjsをインストールし、実行可能とし、phantomjsをどこからでも実行できるようにリンクを張ります。
git clone https://github.com/piksel/phantomjs-raspberrypi.git $ cd phantomjs-raspberrypi/bin $ sudo chmod +x phantomjs $ sudo ln -s /home/pi/casperjs/phantomjs-raspberrypi/bin/phantomjs /bin/phantomjs
次のコマンドで正常にインストールされたかを確認します。
$ phantomjs --version 1.9.8 $ casperjs CasperJS version 1.1.1 at /root/casperjs, using phantomjs version 1.9.8 Usage: casperjs [options] script. [script argument [script argument ...]] casperjs [options] test [test path [test path ...]] casperjs [options] selftest casperjs [options] __selfcommandtest Options: --verbose Prints log messages to the console --log-level Sets logging level --help Prints this help --version Prints out CasperJS version --engine=name Use the given engine. Current supported engine: phantomjs and slimerjs Read the docs http://docs.casperjs.org/
casperjsでスクレイピングの実施
casperjsを使用して、実際に次のスクリプトでスクレイピングしてみます。
CasperHelloWorld.js
var casper = require('casper').create(); casper.start('https://tomosoft.jp/design/', function() { this.echo(this.getTitle()); }); casper.run();
casperjsでCasperHelloWorld.jsを実行すると次のように表示されます。
$ casperjs CasperHelloWorld.js ネットワークソフトウェア開発|TomoSoft
取得したhtmlスクリプトを、ファイルに保存するには次のように行います。ファイルシステムを使用するときは、require(‘fs’)により、ファイル入出力用のオブジェクトを生成します。getHTML()でhtmlソースコードを読み込み、ファイル入出力用のオブジェクトでファイルをオープンして書き込みます。
var fs = require('fs'); var casper = require('casper').create(); casper.start('https://tomosoft.jp/design/', function() { this.echo(this.getTitle()); var html = this.getHTML(); var f = fs.open('jepx', 'w'); f.write(html); f.close(); }); casper.run();