CasperJSとRubyで要javascriptのページをスクレイピング
rubyでjavascriptの動作が必要なページをクロールする場合、
seleniumでやろうとしたんだけど、AWSのec2だとfirefoxのwebdriverがインストールできなくて挫折w(ローカルのmacだと簡単だったけど)
ちなみにここをみてもダメポだった
そこで代わりにCasperJSを使ってみたら何とかなった。
(capybaraとpoltergistという選択肢もあったけど…)
CasperJSはPhantomJSをもげもげするライブラリでseleniumに比べると
必要なソフトのインストールは楽。
インストール方法は下記が参考になった。
CasperJSで画面キャプチャをとる | Siguniang's Blog
CasperJsでもげもげして該当ページのHTMLをファイルに保存して
使い慣れてるrubyのNokogiriで保存したファイルをパースしてスクレイピングする感じ。
このやり方であれば大抵のページのスクレイピングは
何とかなるんじゃないかな(適当)
多分スマートじゃないと思うけど、とにかく楽。
casper = require('casper').create(); var url = "https://www.facebook.com" casper.start(url, function() { this.fill('#login_form', { email: 'your_email', pass: 'your_pass'}, true); this.wait(5000, function() { this.echo("ロード中"); }); }); casper.then(function() { var tmp_file_path = "/tmp/body_html.txt"; var body_html = this.evaluate(function(){ return document.body.innerHtml; }); fs = require('fs'); fs.write(tmp_file_path, body_html, 'w'); }); casper.run();
ちなみに実行時はcasperjs --ssl-protocol=TLSv1 hoge.js
みたいに--ssl-protocol=TLSv1つけないとhttpsのページはクロールできないみたい。