WWWロボットQ&A

※ 本文書は、Martijn Koster氏による WWW Robot Frequently Asked Questions(1996.2.9版)を訳したものです。

Location: http://info.webcrawler.com/mak/projects/robots/faq.html

目次

  1. WWWロボットについて
  2. インデックス用ロボット
  3. 管理者向け情報
  4. ロボットの排除
  5. ロボットを使う

WWWロボットについて

■ WWWロボットとは?

ロボットとは、Web上のハイパーテキスト構造を自動的にたどるプログラムのことです。 具体的には、ある一つの文書(ページ)を取得し、 次にはそのページの中から参照されているすべてのページを見に行く、 といったことを再帰的に繰り返していきます。

ここで、実際にページを見に行く順番は、 必ずしも一定のアルゴリズムに基いているとは限りません。 プログラムによっては、アクセスする順番や時間間隔を決めるのに 何らかのヒューリスティックスを用いるものもあります。 しかし、それらもロボットであることに変わりはないのです。

通常のWebブラウザは、ロボットと呼ばれることはありません。 それを操作するのは人間であり、(インライン画像を除いては) 参照先の文書を自動的に取ってくるようなことはないからです。
(訳注:2.0以降のNetscapeのように、 複数のURLを自動的に調べる機能を持ったブラウザもあります)

WWWロボットは Web Wanderer, Web Crawler, Spider などとも呼ばれます。 しかしこれらの名前は、ソフトウェアがウィルスのように 自力でネットワーク間を動き回るような、誤った印象を与えます。 実際には、ロボットはそれぞれのサイトに対して 文書を送ってくれるように要求を出すだけで、 それ以上のことは何もしません。

■ エージェントとは?

計算機業界では、エージェント(agent)という言葉はさまざまな意味で使われます。 具体的には、以下のような用法があります。
自律(autonomous)エージェント
サイト間を自律的に動き回って仕事をするプログラム。 General Magic's Telescriptの ようなものがある。 これらは特定のサーバ間しか移動できないようになっており、 今のところはインターネット内に広まってはいない。
インテリジェント・エージェント
製品選びや、定型文書の記入などの局面で、ユーザを補助するプログラム。 一般には、こうしたプログラムはネットワークとはあまり関係がない。
ユーザ・エージェント(User-agent)
ユーザに代わってネットワーク上での仕事を行なうプログラムの技術的名称。 Webエージェント(Netscapeなど)、メールエージェント(Eudora)などなど。

■ サーチエンジンとは?

サーチエンジンとは、データの検索を行うプログラムのことです。 WWWの世界では、「サーチエンジン」という用語は、 ロボットによって集められたHTML文書のデータベースの中から 検索を行うためのフォームのことを指します。

■ ロボットの種類

ロボットは色々な目的で使われます。 どのロボットがどの目的で使われるのかについては、 List of Active Robotsを見てください。

■ で、ロボットとかスパイダーとかワームとかいうのは何?

これらはみな同じ種類のものを指す言葉ですが、 少しずつ違う意味合いを含んでいます。
ロボット(robots)
 一般的な名称。前節を参照。
スパイダー(spiders)
 ロボットと同じ。雑誌などで紹介するときには、こう言った方がかっこいい。
ワーム(worms)
 ロボットと同じ。 ただし、厳密にはワームというのは自己複製するプログラムのことを言い、 ロボットとは異なる。
クロウラー(Web crawlers)
 ロボットと同じ。 ただし、WebCrawler というのは そういう名前の特定のロボットである。
アント(Web ants)
 WebAnts は、そういう名前で配布されているロボットである。

■ ロボットは悪者?

一部の人は、以下のような理由から、 WWWにとってロボットは害になると考えています。 しかし、大部分のロボットはこの点で注意深くデザインされています。 運営する側もプロですから、実際に問題を起こすようなことはほとんどありません。 そして、他に良い代替手段のない場面で、貴重な働きをしてくれます。

結局、ロボットはもともと悪いものでもないし、 かと言って無条件にすばらしいものでもありません。 いずれにせよ、注意深く取り扱う必要があるということです。

■ ロボット関係の書籍

(訳注:言うまでもなく洋書の紹介なので、 あまり参考にならないような気もしますが(^^;)
Fah-Chun Cheong, Internet Agents: Spiders, Wanderers, Brokers, and Bots (New Riders刊、 ISBN 1-56205-463-5)
WWWロボット、商取引エージェント、Mudエージェント、その他について解説している。 libwww-perl4 に基づいた、簡単なロボットのソースコードも載せている。

 

 

HTTP, HTML,WWWライブラリなどに関する解説は、 「ロボットの作り方」として見ると少々食い足りないが、 これらの背景技術の入門、および最先端領域の概観には役に立つ。 特に、すべての情報をWeb上で探しているだけの時間のない人には好適。

Joseph Williams, Bots and Other Internet Beasties (Sam's刊、ISBN 1-57521-016-9)
これはまだ読んでいない。

 

 
 
 

この他、 The Software Agents Mailing List FAQでもいくつか紹介されています。

■ ロボットについてもっとよく知るには

以下の場所に、WWWロボットのページがあります (訳注:原文が置いてあるのと同じ場所です)。
http://info.webcrawler.com/mak/projects/robots/robots.html
このホスト自体が有名なロボットサイトですが(訳注:WebCrawlerの本拠地)、 集められた情報は公正で包括的なものです。 このページは、Martijn Koster (m.koster@webcrawler.com) が管理しています。

言うまでもなく、このQ&Aの最新版もここに置いてあります。 また、ロボットについて技術的な議論をするためのメーリングリストに関する情報も、 ここで得られます。


インデックス用ロボット

■ ロボットはどうやって行き先を決めるの?

ロボットによって、戦略はそれぞれ異なります。 一般的には、過去のURLリスト(特にサーバ一覧や“What's New”ページ、 有名なWebサイトなど、各方面へのリンクをたくさん張っているところ) を出発点にします。

たいていのインデックスサーバでは、手動でURLを入力し、 ロボットに訪問させるようにすることができるようにしています。

時には、USENETに投稿された記事や、 メーリングリストの公開アーカイブなどから 集めたURLが使われることもあります。

出発点となるURLのリストが与えられると、 ロボットはその中から訪問するURLを選び、 後は次々に文書を解析しながら、新しいURLを収集していきます。

■ ロボットはどういう情報を集めるの?

ロボットが文書を認識できれば、その内容を解析して、データベースに加えます。 実際にどんなことをするかは、ロボットによって異なります。 HTMLのタイトル部分や、最初の数段落だけを集めるもの、 全体を検索して、HTMLの構成に応じた重みづけをしながらすべての単語を集めるもの など様々です。 METAや、その他の特別なタグを認識するロボットもあります。

我々としては、Webの発展につれて、インデックス情報などのメタ情報を 効果的に文書と結びつける手法が使えるようになってほしいところです。 これは現在進められているところですが……。

■ ロボットに自分のページを見つけてほしい

幸い、あちこちのページに手で登録して回る必要はありません。 Submit-it (URL: http://www.submit-it.com/)がその作業を代行してくれます。 (訳注:国内では さぶみっといっと! というものがあります)


管理者向け情報

■ ロボットが来たことは、どうやってわかるの?

まず、サーバのログを見て、多くの文書ファイルを(とりわけ短時間に) 取得しているサイトがないかチェックしてください。

User-agent の記録を取るサーバなら、 見慣れない名前のエージェント名がないか調べることで、 ロボットを見つけることもできます。

最後に、“/robots.txt”というファイルを繰り返しチェックしている サイトがあったら、それはロボットの可能性があります。

■ うちにもロボットが来たけど、どうしたらいい?

何もすることはありません(^^; ロボットは全自動です。特にこちらから働きかける必要はありません。

新しいロボット(The List of Active Robotsに載っていないもの)を見つけたと思ったら、 またそのロボットがしょっちゅう、もしくは集中的にやって来るようなら、 私に知らせてください(訳注:原著者のこと。訳者に言ってこられても困ります)。 そうすれば、記録に残しておいて後で参考にすることができます。 ただし、ロボットが来るたびにいちいち報告をよこすようなことはしないでください。

■ ロボットがものすごい勢いでアクセスしてきたら?

これが悪名高い「ラピッドファイア」です。 普通、これに気がつくのは、 アクセスログをモニタまたは解析している時です。

最初にすべきことは、 サーバの負荷やエラーログを調べ、できれば同時接続の状況なども見て、 実際に問題があるかどうか調べることです。 中〜高程度のパフォーマンスのサーバなら、 おそらく毎秒何回という頻度のリクエストでも (特に、個々の訪問が短ければ)問題なく処理できるでしょう。

しかし、サーバソフトの能力が低かったり、 サーバ自体が低速だったり(PCやMacで動かしている場合など)、 接続時間の長いリクエスト(CGIスクリプトや、サイズの大きな文書など)を 大量に要求されたりすると、 サーバにつながりにくくなったり、 ホストマシンの負荷増大、パフォーマンスの低下、 最悪の場合にはシステムクラッシュといった事態を引き起こすことになります。

このような場合に、幾つかしておくべきことがあります。 最も重要なのは、情報を記録しておくことです。 いつラピッドファイアに気付いたのか、 どのようなことが起こったか、ログファイルの記録、 実際にどういった手を打ったか、などなど。 こういう記録を取っておくと、後々役に立ちます。

その次には、問題のロボットがどこから来たのか、 そのIPアドレスもしくはDNSドメイン、 そのロボットに関する記載が list of active robots にないか、などを調べます。 相手のサイトが見つかれば、そこの責任者にメールを送って、 問題を知らせることができます。 それが駄目なら、当該サイトの電話番号を調べたり、 そのドメインのポストマスターにメールを出すといった方法もあります。

上記のリストに載っていないロボットだったら、 あなたの方で集めた情報を私(訳注:訳者ではなく原著者)に送ってください。 直接力にはなれないかもしれませんが、 少くとも、他の人の参考になるように情報を残しておくことができます。

■ ロボットに来させないようにするには?

これについては、次の節で説明します。


ロボットの排除

■ ログファイルに /robots.txt というのが記録されているけど、これ何?

それはおそらく、ロボットが Standard for Robot Exclusion に従って、 ロボットのアクセスに制限が設けられているかどうかを調べたものでしょう。 詳しくは robots.txt の説明を見てください。

別段ロボットに興味はないけど、 エラーログに変なメッセージが残るのがいやだという人は、 サーバのドキュメントルートのディレクトリに “robots.txt”という名前の空のファイルを作っておけばよいでしょう (なお、そのファイルの中に適当なHTMLや「あなたは誰?」といった文を 書いておいても、誰かが読むわけではないので無意味です:-))。

■ ロボットに自分のサイトの探索をやめさせたい

手短な方法は、robots.txt に次の2行を書いておくことです (訳注:他に余計な空行などを入れないこと)。
――――――――――――――――
User-agent: *
Disallow: /
――――――――――――――――
しかし、もっと選択的に排除することも、簡単にできます(次節参照)。

■ /robots.txt のことをよく知りたい

詳しいことは Standard for Robot Exclusion に書かれていますが、 基本コンセプトは単純なもので、 構造化されたテキストファイルを用意することにより、 一部またはすべてのロボットに対して、 このサーバのどこそこは立ち入り禁止ですよと伝えるものです。 論より証拠(下手な訳より原文)、例を見た方が早いでしょう。
――――――――――――――――
# /robots.txt file for http://webcrawler.com/
# mail webmaster@webcrawler.com for constructive criticism

User-agent: webcrawler
Disallow:

User-agent: lycra
Disallow: /

User-agent: *
Disallow: /tmp
Disallow: /logs
――――――――――――――――
#” で始まる最初の2行は、コメントを表します。

最初の段落(空行で区切られています)は、 “webcrawler”という名前のロボットは何も禁じられていない (つまり、どこに行ってもよい)ということを表しています。

2番目の段落は、ロボット“lycra”に対して、 “/”で始まる相対URLへのアクセスを禁止しています。 サーバ上のすべての相対URLは / で始まるので、 結局これは、このロボットを完全に締め出すという意味になります。

最後の段落は、ほかのロボットすべてに対するもので、 “/tmp”および“/log”で始まるURLを 見ることを禁じています。 ここで、User-agent の所の“*”は 正規表現やワイルドカードの類ではなく、 特別な意味を持つトークンであることに注意してください。

ありがちな間違い……

  1. 正規表現やワイルドカードは使えません。
  2. Disallow: /tmp/*
    ではなく、
    Disallow: /tmp
    と書く必要があります (訳注:しかし、これを正しく解釈してくれないロボットもいます(--;))。
  3. 一つの Disallow 行に、二つ以上のパスを書いてはいけません (これに関しては、将来変更される可能性あり)。
  4. (日本語版オリジナル)コメント行と同様に無視されるものと思って、 余計な所に空行を入れてしまうというのもありがちです。 経験者は語る(^^;
  5. ■ 今後、/robots.txt の仕様は変わるの?

    おそらく……。すでに、アイデアは幾つか出されています。 ただ、まとめる時間がないのと、そう急いで変更することもないという理由で、 まだまとまった提案の形にはなっていません。 ロボットMLにメールで提案を出して、 後はロボットホームページで進行状況を見守ってください。

    ■ 自分で /robots.txt を作れない場合には?

    あなたがサーバ全体を管理しているのでない場合は、 サーバのルートに /robots.txt を作れないこともあるでしょう。 しかし、ほかに方法がないわけでもありません。 新たに、 METAタグによるロボット排除規格 が作られています。

    これは、各々のHTML文書の中に

    <META NAME="ROBOTS" CONTENT="NOINDEX">
    のようなタグを入れておけば (訳注:厳密には <HEAD> 〜 </HEAD> の中に入れる)、 その文書は引用されない(検索エンジンなどに載らない) というものです。

    同様に、

    <META NAME="ROBOTS" CONTENT="NOFOLLOW">
    としておくと、ロボットはこの文書からのリンクを追跡しません (ただし、文書の内容自体は引用される可能性があります)。


    ロボットを使う

    ■ ロボットはどこに行けば使えるの?

    検索エンジンのことなら、Web上には種々のディレクトリサービスがあります。 例えばNetscape社の Exploring the Net や、あるいは MetaSearch といったメタサーチサービスもあります。

    ■ ロボットはどこで手に入るの?

    とりあえず、 robot list を見てください。 どのロボットが入手可能かという情報を、 少しずつ付け加えていくつもりです。

    ■ ロボットのソースコードがほしい

    上を参照。 ソースを公開しているものもいくつかあるでしょう。

    ■ ロボットを作る際に気をつけることは?

    たくさんあります。 まずは The Robot Page の内容すべてに目を通すこと。 後はWWW協議会報のバックナンバーを読み、 HTTPとHTMLの仕様も完全に理解しておく必要があります。 楽な仕事じゃないですよB-)

    ■ 自作のロボットをリストに付け加えるには?

    登録用のフォーム に必要事項を書き入れて、あとは指示に従ってください。