最終更新時刻:2009年11月7日(土) 10時00分
11

サーチエンジンの仕組み(1) − クローラー

公開日時:
2004/05/09 13:51
著者:
inoue

サーチエンジンを運用していて非常に多い問い合わせは、「どうすれば検索結果に載るんですか?」というものだ。あるいは「ホームページを作ったんですが、検索結果に出てきません。どうしてですか?」というものだ。

サーチエンジンの仕組みを知らない一般の人に取っては当然の質問だ。これらの質問に答えるには仕組みを説明する必要がある。若干技術的な話になるがご了承頂きたい。

見かけ上のサーチエンジンは、「ユーザーがキーワードを入力して、それに対して10件のサーチ結果(URL)が出てくる」という表面上はシンプルなシステムだ。

簡単にその裏側を見てみると、大きく分けて3つの部分に分けることが出来る。それぞれの概念を簡単に説明する。細かい実装方法は色々と考えられるのでそれについては特に触れない。

  1. クローラー(フェッチャー、ロボットなどともいう)
  2. ウェブページを収集する。最もシンプルな方法はシードとなるURLリストを作り、そのURLにプログラムがアクセスしHTMLを取得する。このプログラムは皆さんがお使いのブラウザと同様の動きをする。このプログラムのことをクローラーと呼ぶ。

    例えばシードリストに100のURLがあれば(リスト1)、1回目のクロールで100ページのHTMLを取得する。この100ページのURLにアクセスしている時に、サーバーからエラーが返って来たり(代表的なエラーは404 Not Found)、他のページへリダイレクトされたりするが、普通はHTTPサーバーから返されるステータスをこれらの100URLに対してきちんと記録しておく。

    正常にHTMLを取得できたURLが90だとすると、今度はこの90のHTMLに登場するリンク先のURL(<a href="url" >のurlの部分)を全て抽出し、抽出されたURLリストとリスト1を合わせてリスト2を作成する。普通1つのHTMLには20や30のリンク先が出てくるので、リスト2はリスト1よりも大きくなる。

    仮に平均で1ページに30のリンク先が出て来るとすると、リスト2は

    90 x 30 + 90 = 2,790

    のURLからなるリストとなる。ここで2,790に重複が無いかどうかを調べ、重複していたら削除するという作業も行う。これをDuplicate Detectionと呼ぶ。仮に重複が5%あったとすると

    2,790 x 95% = 2,650

    のURLが残るがこれをリスト3とすると、次回の巡回にはこのリスト3を用いる。

    以上の手順を延々と繰り返すとリストNに含まれるURLの数は膨大になる。もちろん説明のためにシードリストを100としたが、こんなに少ないシードで始めることはないカテゴリに登録されるようなメジャーサイトを数万から数十万をシードとして使うだろう。

    また応用としてアンカーテキストとそのURLを使うとクローラーでページを取得しなくてもインデクスに入れることが出来るがそれについては後ほど説明しよう。実装は色々だが、概念的にはこれがクローラーの基本だ。

次回はインデクスについて説明しようと思う。

-inoue

※このエントリは CNET Japan ブロガーにより投稿されたものです。朝日インタラクティブ および CNET Japan 編集部の見解・意向を示すものではありません。

このエントリーへのコメント

5

>正常にHTMLを取得できたURLが90だとすると

ご指摘ありがとうございます。
90の誤りです。申し訳ありません。

90 x 30 + 90 = 2790

です。URLの総数です。

-inoue

  inoue on 2004/05/19

4

>90 x 30 + 80 = 2,780
の 80という数字はどこから来るんでしょうか?

  質問したい人 on 2004/05/18

3

掛け算違いのコメントを書いたものですが、コメント自体は削除されてしまったというわけですね。


ようするに都合の悪いことは削除されるということか

  muramura on 2004/05/11

2

コメントで間違いを指摘して頂いた方、どうもありがとうございます。確認のメールを送ったのですが、メールアドレスが本物でないため戻ってきてしまいました。また名前も匿名でした。申し訳ありませんが、せっかくのコメントを頂きましたが、削除させていただきました。今後は出来れば匿名ではないコメントをいただければ幸いです。

-inoue

  inoue on 2004/05/10

1

掛け算を間違えていたので修正しました。

-inoue

  inoue on 2004/05/10

ブログにコメントするにはCNET_IDにログインしてください。

この記事に対するTrackBackのURL: 

CNET_ID

メンバー限定サービスをご利用いただく場合、このページの上部からログイン、またはCNET_ID登録(無料)をしてください。