忍者ブログ

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

CasperJSでスクレイピング

色々あってnode.jsと触っているのですが、調べていたらスクレイピングでいい感じに使えそうなCasperJSというのを見つけたのでちょっち触ってみました。
やってみたらスクレイピングするより、コマンドライン引数取得して使えるようにする方がしんどかったです。
通常使える(らしい)「process.argv」を使おうとすると何か怒られるので、あれこれ調べたら

http://casperjs.readthedocs.org/en/latest/cli.html

で、casper.cli.argsてのを使うらしいです。
たったこれだけなのに5時間以上とかかかりました、、、アホなのか。
ジョジョ見てアルスラーン見て笑点見て、鉄腕DASHと花もゆまで見てようやく出来ました。
時間かかり過ぎだこん畜生。
やっぱりマニュアル見ないといかんです。メリケン語だったけど('A`)

以下、今回へろへろ作ったサンプル。
指定のURLにアクセスしてフォームの指定要素にテキスト入れてから要素取得します。
送信ボタンのクリックとかも出来るらしいですが、今回はしていません。

casper  = require('casper').create();

//コマンドラインの引数をスペース区切りの文字列に変換

var args = casper.cli.args;

var argsStr = args.join(" ");

var url = 'http://www.hoge.co.jp';

var formSelector = "#fuga > form";

var itemAndValList = { "item" : argsStr };

var resultSelector = "#result li";

casper.start(url,function(){

//フォームに値を入力

casper.fill(formSelector,itemAndValList);

//waitの後、表示結果を取得

casper.wait(500, function() {

    var list = casper.getElementsInfo(resultSelector);

//取得結果を配列に格納したのち、json形式で出力

    var textList = new Array();

    for(var num in list){

    textList.push(list[num].text);

    }

    console.log(JSON.stringify(textList));

});

});

casper.run();


URLとか要素のselectorとかは適当な奴です。
お約束ですが、これは実験用のスクリプトなので、もし参考にされる場合は適宜wait入れるとかして、相手のサーバに負荷をかけないにしてください。
相手のサーバ落とすの駄目、ぜったい。

PR

tmhOAuth覚え書き

ツイッターのツイート取得したくてtmhOAuthふにふに弄ったので覚え書き

1)https://apps.twitter.com でアプリケーション登録する
2)https://github.com/themattharris/tmhOAuth でtmhOAuth本体を、https://github.com/themattharris/tmhOAuthExamples でサンプルをダウンロードしてくる
3)サンプル内のtmhOAuthExampleクラスの各種キーに(1)で登録した時に生成されたキーを登録する。
「bearer」は cli/obtain_bearer.php でアクセスすると表示される物を使用。
4)サンプルのindex.phpにアクセス。うまい(てーれってれー)

以下タイムラインとって取得するだけのサンプル
        $tmhOAuthObj = new tmhOAuth($configHash);
        $endpoint = $tmhOAuthObj->url('1.1/statuses/home_timeline');
        $code = $tmhOAuthObj->request('GET', $endpoint);
        $response = json_decode($tmhOAuthObj->response["response"]);
        foreach($response as $key => $obj){
             print $obj->user->name."<br>";
             print $obj->text."<hr>";
        }

参考URI
http://jaxx2104.info/tmhoauth-twitter
https://dev.twitter.com/rest/reference/get/statuses/home_timeline