ブログ村のランキングポイントを単純にスクレイピングしてみた

ウェブから情報を収集する際には、簡単に使えるものですとRSSリーダーや
キーワードを登録すると向こうから情報が送られてくるような、
Googleアラートカメリオなんてサービスがあります。

もっとピンポイントで自分の欲しい情報を取ってくるにはどうすればいいか?

クローリング・スクレイピングという方法を使えば、そういうことは出来ます。

クローリングはウェブページをいろいろとたどっていくことで、
スクレイピングはウェブページから必要な情報を抜き出すことです。

実はそれを試そうと思ってこんな本を買っていた。

少しだけさわりをやってそのままだった。

そろそろ簡単なことでもやろうかと思って、
自分のブログ村のランキングポイントをスクレイピングしてみることにしました。

前にLinux標準コマンドだけで出来る仕事じゃないか?と思ってやってみたんですが、
ポイントの部分はどうやらjavascriptを解釈しなきゃいけないらしく、wgetやcurlコマンドを使うだけでは無理でした。

書籍を見るとPhantomJSというのを使えば、javascriptの解釈が出来るようです。

ということで、さっそくやってみた。

書籍ではPythonも使ってますが、自分としてはPhantomJSだけでも十分なことが出来るんじゃないかと思ったので、今回はPhantomJSだけで処理をしてみることにしました。

PhantomJSを使って色々試してみる

上記のExperiment #3を参考にこんな感じに一部を書き換えてみました。

// headlessブラウザを作成
var page = require('webpage').create();

//URLを開く
page.open('https://www.blogmura.com/point/01451148.html', function(status) {
  //ブラウザ内でJSを介してデータを取得  
  var pointTable = page.evaluate(function() {
    return document.getElementById('pointTable').innerText;
  });
  console.log('ポイントテーブル ' + pointTable);
  phantom.exit();
});

これをjsファイルとして保存しPhantomJSに読み込ませてみると

$ phantomjs pointTable.js
ポイントテーブル 今日	02/16	02/15	02/14	02/13	02/12	02/11	全参加数
総合ランキング(IN)	47109位	48399位	61922位	91483位	88933位	87463位	86714位	932904サイト
INポイント	0	20	0	10	0	0	0	30/週
OUTポイント	30	60	50	30	0	20	40	230/週
PVポイント	170	320	300	250	190	480	460	2170/週
その他日記	528位	562位	886位	1544位	1511位	1503位	1491位	25416サイト
フリーター日記	19位	17位	22位	37位	38位	37位	36位	448サイト
挑戦・チャレンジ	6位	6位	6位	7位	6位	5位	5位	157サイト

いいですね。ランキングポイント部分が取り出せました。
これが出来れば自分としては十分。

あとは好きな部分だけ抽出すればいい。

$ phantomjs pointTable.js | grep 'ポイント'
ポイントテーブル 今日	02/16	02/15	02/14	02/13	02/12	02/11	全参加数
INポイント	0	20	0	10	0	0	0	30/週
OUTポイント	30	60	50	30	0	20	40	230/週
PVポイント	190	320	300	250	190	480	460	2190/週

意外と単純な方法もあったんですね。
これで好きなデータを取り出すことが出来そうです。

ちなみに、スクレイピングツールというのもあるみたいですね。
それを使えば、そもそもコードを書いたりする必要もなさそうです。

簡単にWEBからデータ抽出ができる!スクレイピングツールまとめ

スポンサーリンク
 
スポンサーリンク

コメントをどうぞ

メールアドレスが公開されることはありません。