法と技術とクローラと私


mala

Web

URL: http://librahack.jp/



http://www.nantoka.com/~kei/diary/?20100622S1

http://blog.rocaz.net/2010/06/945.html

http://blog.rocaz.net/2010/07/951.html







()









もし自分が同様のクローラを書いたらどうなるか


librahack




robots.txt

meta

()

500






UserAgent(使)



なぜrobots.txtやmetaタグを無視しても良いと考えるのか

robots.txtやmetaタグによるbotの拒否は、ロボット型の検索エンジンのクローラが際限なく動的に生成されるリンクを辿っていって双方のサーバーリソースに過大な負荷をかけたり、公開されるべきでないコンテンツが検索エンジン経由で公開されたりといった事故を防ぐのが目的(という認識)なので、特定サービス向けに特定パターン以外のリンク先を探索しない個人的な使用目的の巡回ツールに対してまで、robots.txtやmetaタグの規定するルールを適用するのは適切ではないと考えているからです。

なぜウェイトを入れる必要がないと考えるのか

リクエストを並列して投げない(前回のリクエストの完了を待ってから次のリクエストを発行するようになっている)ならば、相手先のサーバーに対して与える負荷は限定的であり、一般ユーザーが通常の利用目的でブラウザを使ってかける負荷の上限と大差がないと考えるからです。更新チェックなどの目的で同一の(更新されている確率が低い)URLに対してウェイトを入れずに数秒、数分の間隔で自動アクセスするのは、非常識であると考えます。しかし、同じURLに対する重複したアクセスがなく、同一ドメインのリンク先をn段階辿ってまとめて保存するような機能は、本来ブラウザに備わっていてもおかしくないようなもので、自前で書いたツールを使っているだけで通常のブラウジング行為の延長線上であると捉えるべきです。古いIEには実際そういう機能がありました(ウェイト入れてたかどうかとかは調べてない)。

なぜ500エラーが出てもクロールを中止する必要がないと考えるのか

自分のリクエストが原因でエラーが出ているのか区別がつかないので、単に時間をおいて再試行すれば良いと考えるからです。全てのレスポンスがエラーを返すようになったならば、その段階で目的が達成できないのでプログラムの見直しを行うことになるでしょう。500レスポンスは単にそのリクエストに対してエラーが出ているというだけなので、自分のリクエストに原因があるとは考えません。なのでこの場合の適切なエラーハンドリングはクロールの停止やプログラム開発の停止ではありません(適切なウェイトを入れた上で再試行します)。もし403エラーが返ってきているのであれば、自分のリクエストが何らかの理由で拒否されているだろうから、処理内容を見直す必要があると考えます。403レスポンスが返ってきたら、別のUAや別の回線からのアクセスを試して、何らかの自動的な制限に引っかかったのか、あるいは自分の書いたプログラムが決め打ちでアクセス拒否されているかどうかを判断したうえで、サービス運営者に問い合わせるなどするでしょう(アクセス拒否されないためにはどうすればいいか聞く)。気軽に問い合わせできる感じでなかったら開発を中止する。

なぜUserAgentを変える必要がないと考えるのか

3botUserAgentIPbot(botUA)

UserAgent
  • 書いたプログラムを配布する場合
  • 書いたプログラムを元に何らかのサービスを第三者に提供する場合
    • つまり自分の意思以外でリクエストが自動送信されるケースで責任の所在を明確にするため
  • ライブラリの作者が悪評を被るレベルの常軌を逸した使い方をする場合

bot



使httpdbot403

402 payment requiredyoutube使

IPhttpd

403iptables

IPUserAgent

行儀の良いbotの話

  • ウェイトを入れるのは良い慣習だ。
  • エラーが返ってきたらクロール頻度を調整するのは良い慣習だ。
  • botの目的や連絡先が分かるようにするのは良い慣習だ。
    • 例えばIPアドレス逆引きで組織名が分かる
    • 例えばUserAgentにbotの目的や連絡先が分かるURLが含まれている

bot


From  

Retry-After  bot


3




ab(Apache Bench)  使

  



まとめ

403返して終わりって事例でポリス沙汰にするな。