ふとKaggleに参加している日本人がどれくらいいるのかが気になったので,簡単にクローラーを作って調べてみた.

Kimonoを使ったクロール

手動でクローラーを書いてもいいのだけれども,今回はkimonoというクローラーを使ってみた.

kimonoはWebから簡単にクローラーを作成してAPIやJSON形式で取得できるようにするようなアプリケーションで,Chrome Extensionを使うことでインタラクティブにクロールする内容を選択することができる.今回は,Kaggle Rankingsのランキング500ページ分をクロールして,20000人分のユーザの情報(名前,ランク,ポイント,ロケーション)を取得した.今回クロールした結果は,以下のkimonoのウェブページから誰でも利用できるはず(アカウント持ってないと見れないかな).ただしrankとptsが一緒になってたりとちょっと汚いので注意.

ちなみに,どれくらい簡単にできるかをgif動画にしてみた.最初は色々戸惑った部分もあったけれど,慣れてしまえば本当に簡単に扱える.以下の場合だと,ユーザ情報がページあたり50人分あるので,ある部分を選択したあとに他の部分も同様に取得するようにチェックを付けるのが重要.あと,paginationはいわゆる「次」にあたる部分を選択する.本当は選択した部分に対して正規表現を掛けてテキスト処理をかけることもできるのだけれども,今回は行っていない.

後処理

クロール自体はkimonoに任せることができたので,ここからはpythonスクリプトをちゃちゃっと書いて整形作業.クロールしたデータはJSON形式やcsv形式でダウンロードすることもできるが,今回はAPIから叩いてみる.kimonoの”Use in code”というタブに,CurlやjQuery,Node,PHP,Python,Rubyでそれぞれ書かれたスクリプトがあるので,それを使ってデータを取得する.例えば,curlとPythonだと以下のようになる

1
$ curl --include --request GET "https://www.kimonolabs.com/api/dyo7tdm8?apikey=7ZTTugRoP8xgIlOdAdyiHmwP4rFLviDO"
1
2
3
4
import json
import urllib

results = json.load(urllib.urlopen("https://www.kimonolabs.com/api/dyo7tdm8?apikey=7ZTTugRoP8xgIlOdAdyiHmwP4rFLviDO"))

今回は日本人のアカウント一覧が欲しいので,”Country of residence”にJapanと書かれていてかつポイントを持っているアカウント一覧を出力した.なお,ユーザプロフィールの記入は基本任意なので,プロフィールで”Country of residence”を編集していない日本人は対象外になっている

リスト(2014/08/18現在)

ユーザページに飛べるように一応HTMLにした.気が向いたら定期的にアップデートするようにして,もっときちんと体裁整えるかも.こういった公開も含めてkimono側で簡単なインターフェイスがあると楽なんだけどなーと思った.