読者です 読者をやめる 読者になる 読者になる

どこで働いているかわからない、無名のエンジニアのわりとどうでもいい日記www

ネットデブリ予定地です。。生暖かい目で今後ともヨロシクwww 技術よりも哲学的な内容が多いですww

CasperJSとRubyで要javascriptのページをスクレイピング

rubyjavascriptの動作が必要なページをクロールする場合、
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のページはクロールできないみたい。