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();