2012-03-24

簡単なクローラ作るならPythonだよ!

http://d.hatena.ne.jp/nishiohirokazu/20120323/1332504404

最近Webクローラクライアントを作るお仕事が増えた。WebクローラクライアントというのはHTTP(S)を介して様々なファイルダウンロードして解析し、結果を溜め込むだけのプログラムであるボットともいう。

クローリングの規模が大きくなると、クロール処理部と結果貯蓄部を分離する必要がある。クローラには様々なものがあるが、ものによっては特定のサーバに集中的にクローリングを行うこともある。このとき、1つのIPを使って集中的にクローリングを行うと、攻撃とみなされ一瞬でbanされてしまう。そこで、一見するとまったく関係なさそうなIPを複数確保し、それぞれにクローラーを仕掛けて走らせるのである

結果貯蓄部は、要するにデータベースサーバであり、何を使用しても良い。クロール処理部とのやりとりに使用するプロトコルRDB依存プロトコル(MySQL Socketとか)でもHTTPでもなんでもいいが、とにかくクロール処理部が解析した結果を随時溜め込めるようにしなければいけない。逆に言うと、まぁ、口さえできるのであれば何を使用しても良い。

問題は、クロール処理部に何を使用するかである。おおまかな要件は次の通りである

これらの要件を満たそうとすると、ぶっちゃけJavaPythonくらいしか選択肢が無い。

JavaPython
HTTP(S)HttpURLConnectionかApache HTTP Clienturllibかurllib2
環境依存Write once, run anywhere (VM最初からインストールされてるのはSolarisくらいのものだが、どんなOSでも大体はすぐインストールできる)UNIXであればほぼ標準で入ってる、Windowsインストーラも用意されている
キャッシュ機能JDK6にDerby標準搭載Python 2.5からsqlite3標準搭載

JavaPythonの違いは山ほどあるが、簡単なことをやらせるだけならPythonJavaよりも使用メモリが少なくなりがちなので、そういう場面であればPythonは(現時点においては)最強の座に君臨すると考えられる。

余談であるが、私が本当に好きなのはPerlであり、

という条件下であれば何の迷いもなくPerlを使っていたであろう。畜生

記事への反応(ブックマークコメント)

ログイン ユーザー登録
ようこそ ゲスト さん