使うな→PHPで書かれたWEBクローラー用クラス
とあるブログでこんなPHPのコードが紹介されていた。PHPで書かれたWEBクローラー用クラスだ。
SourceForge.net: PHPCrawlいやな予感がしたので、ダウンロードしてざっと見て、ローカルで試してみた結論。
危険。わかってない人は使うな。
これは絨毯爆撃型のクローラーだ。筆者が見た限り、このクラスにはリクエスト間隔を制御する仕組みが見当たらなかった。クロール全体におけるダウンロード量の制限設定値などはあったがそれもデフォルトでは制限無し状態にセットされている。 そのまま使えば、1秒間に数百リクエストくらい投げることができてしまうだろう。 そのとき、クロールされる側のWebサーバーはどうなるか?考えてもみてほしい。
クローラーの代表格、Googleは、「クローラーはWebサーバーに対して気を使いながらクロールすべきである」ということをよく理解したうえでクローラーを使う/作っている。
1. Googlebot はどのくらいの頻度でウェブ ページにアクセスしますか。
Googlebot は、平均して数秒に 1 回を超える頻度でサイトにアクセスすることはありません。 ただし、ネットワークの遅延などにより、短期間の間にアクセス頻度がわずかに増えたように見える場合があります。
(途中略)
3. Googlebot がサイトをクロールするスピードが速すぎる場合は どうすればよいですか。
サイトの URL と問題の詳細を Google までご連絡ください。 迅速に対応させていただけるよう、ウェブ ログ内の Google からのアクセスを示す部分を添えてください。
ウェブマスターのための Google 情報 より
ウェブ サーバーが If-Modified-Since HTTP ヘッダーに対応していることを確認する。 この機能を使用すると、Google が前回サイトをクロールした後にコンテンツが変更されたかどうかを、サーバーからクローラに通知し、 帯域幅や負荷を軽減できます。ちなみに、上で紹介したPHPでのクローラーはIf-Modified-Sinceヘッダなんて投げないしステータスコード304も理解しない。
ウェブマスターのためのガイドラインより
クローラーというものはどういうものなのかを学ぶために、他人に迷惑のかからない環境において、このようなコードを使うのであれば大いに結構だ。 しかしうっかりでも故意にでも、第三者の管理するWebサーバーに対し、何の調整も施さずにこういう稚拙なコードを使って大量アクセスを浴びせてWebサーバを過負荷状態にしてしまうようなことがあれば、極端な話、相手から業務妨害で訴えられても文句は言えないということを肝に銘じるべきだろう。
See Also:
コンピュータが勝手に株を売買していいのか? (2004/9)
そのサイトを見るとルーターがクラッシュする(2004/9)
naoyaのはてなダイアリー - 絨毯爆撃系ブラウザ(2005/11)
誰かmod_throttleをApache2に移植してください(2006/2)

コメント
だれか、リクエスト間隔を制御する仕組みを組み込んだバージョンを公開してくれるといいな。
Posted by PHP deve at 2006年3月 4日
コメントする
(初めてのコメントの時は、コメントが表示されるためにこのブログのオーナーの承認が必要になることがあります。承認されるまでコメントは表示されませんのでしばらくお待ちください)