WebCrawler

偶然にもblancoプロジェクトと同じ名前のプログラムをつい数ヶ月前に作ってました。
最終的にはGoogleみたいにする予定だったけれど、クローラができた段階で頓挫。
HTMLパーサにはHtmlParserを使ってました。

クローラの作り方は簡単です。
まず一つのURL(例えば、http://www.yahoo.co.jp/)から、HTTP/GETでHTMLを取得します。
それを解析して、<A HREF>タグや<FRAME>タグのリンクを抽出します。
それらに対してまた同じことを繰り返していくのです。
すべてのリンク先をたどりつくしたらおしまい。


基本的な仕組みは簡単なのだけれど、実際にやってみると色々気をつけないといけないことや、工夫しなければならないことがたくさんあります。
特に外(イントラではなくインターネット)をたどる場合は、情報量が尋常じゃないし、やり方を間違えると、世界中のサーバ管理者からヒンシュクを買うかもしれませんから。



以下、私が気をつけた点です。

  • java.net.URLConnectionを使う場合、プロキシがある場所ではJavaVMにシステムプロパティの設定をしてやる必要があること。
  • ROBOT禁止サイトにはたどらないようにすべきであること。
  • 外をクロールするときにはデータ量が膨大になるので「たどらなければならないリスト」や「クロール済みリスト」のデータ構造を工夫すること。
  • マルチスレッドでクロールすること。
  • 弱いサーバは落ちるので、アクセスが集中しない仕組みを考えること。(やっていることはDOS攻撃と同じですから)
  • 外をクロールする場合、膨大な時間とメモリとHDDが必要なこと。一度に泳ぎきれないので、中断/再開できる仕組みが必要。