Webサイトをクロールするときに善良な市民になるには?


83

さまざまな公開Webサイトをクロールし、それらのデータを処理/集約する機能を開発します。電子メールアドレスを探すことほど厄介なことはありません。実際、サイトへのトラフィックを実際に増やす可能性があるものです。しかし、私は脱線します。

敬意以外robots.txtに、(a)悪意のあるように見えて禁止されている可能性を回避し、(b)サイト所有者/ウェブマスターに問題を引き起こさないために、従うべきルールまたはガイドラインはありますか?

私が考えることができるいくつかの例は重要かもしれないしそうでないかもしれません:

  • 並列リクエストの数
  • リクエスト間の時間
  • クロール全体の時間
  • 潜在的に破壊的なリンクの回避(スパイダーオブドゥームになりたくない-しかし、これが実用的かどうかを知っている人)

しかし、それは実際には単なる吐き出しです。クモを書いたり利用したりしようとする人に広く適用できる実証済みの知恵はありますか?


1
以下の回答は、コンテンツを丁寧にクロールする方法に関する優れた回答を提供しますが、クロールしたコンテンツの許容される使用法に留意してください。全部または一部を再公開することは、所有者の著作権の侵害になる可能性があります。
ギャビンコーツ

回答:


85

robots.txtに従うことに加えnofollownoindex<meta>要素とリンクに従う:

  • robots.txtはインデックス作成をブロックする適切な方法でないと考えている人が多く、その観点から、多くのサイト所有者に<meta name="robots" content="noindex">タグを使用してWebクローラーにページのインデックス作成を行わないように指示しています。

  • Webサイト間の接続のグラフ(PageRankに似たもの)を作成しようとしている場合、(および<meta name="robots" content="nofollow">)は、ソースサイトが適切な承認を与えるほど十分に宛先サイトを信頼していないことを示します。したがって、宛先サイトにインデックスを付けることはできますが、2つのサイト間の関係は保存しないでください。

SEOは実際の科学というよりも芸術であり、自分が何をしているのかを知っている多くの人々と、何をしているのかを知っている人々のエグゼクティブサマリーを読む多くの人々によって実践されています。SEOmozのブログの投稿で誰かが聞いたことがある、または正しく解釈されていない可能性があるために、他のサイトが完全に受け入れられると判断したことを行うことで、サイトからブロックされるという問題が発生します。

あなたはGoogle、Microsoft、またはYahoo!でない限り、その人間の要素のため、特に証明されない限り、悪意があると推定されます。Webサイトの所有者に対する脅威ではないかのように行動し、潜在的に悪意のある(ただし望ましくは無害な)クローラーがどのように行動するかに従って行動するために、細心の注意を払う必要があります。

  • ブロックされていることが検出されたら、サイトのクロールを停止します。仕事、スロットル、タイムアウトなどを知っているページの403/401
  • 比較的短い期間で徹底的なクロールを回避します。サイトの一部をクロールし、後で(数日後に)戻って別の部分をクロールします。並列リクエストをしないでください。
  • 潜在的に機密性の高い領域のクロールを回避します/admin/。たとえば、その中にあるURL 。

それでも、UAのなりすましやクロールパターンの意図的なマスキングなどのブラックハットテクニックに頼らない限り、困難な戦いになります:多くのサイト所有者は、上記と同じ理由で、未知のクローラーを目の前でブロックします「自分のサイトをハッキング」しようとしない人がいる可能性。多くの失敗に備える。

未知のクローラーが持つネガティブなイメージに対抗するためにできることの1つは、ユーザーエージェント文字列でそれを明確にすることです:

Aarobot Crawler 0.9 created by John Doe. See http://example.com/aarobot.html for more information.

どこでhttp://example.com/aarobot.html達成しようとしているのか、なぜあなたが脅威ではないのかを説明しています。そのページにはいくつかのことがあります:

  • 直接連絡する方法に関する情報
  • クローラーが収集する情報と、クローラーが収集する理由に関する情報
  • オプトアウトおよび収集されたデータの削除方法に関する情報

最後の1つが重要です。優れたオプトアウトは、Money Back Guarantee™のようなものであり、不当な量ののれんを獲得します。人道的である必要があります。1つの簡単な手順(メールアドレスまたは理想的にはフォーム)と包括的(「落とし穴」があってはなりません。オプトアウトは、例外なくクロールを停止することを意味します)。


18
User-Agentに明確な情報を入れることを提案するための巨大な+1 誰が大きなサイトをスパイダーしているのかを把握するために、ウェブサーバーのログを熟読する仕事がありました。
Carson63000

4
URLをフォームに入れることは非常に一般的(+http://example.com/aarobot.html)です。+ここにサインの目的が何なのかわかりませんが、よく見ました。Web-Snifferがそれを行います。
TRiG

これは素晴らしい情報ですが、私は一つのことで混乱しています:rel="noindex"それは<a>属性であるかのように言及しますが、リンクするページは<meta>タグのcontent属性の一部としてそれを説明します。それは両方ですか、それとも答えのタイプミスでしたか?
アーロンノート

1
「SEOは本当の科学というより芸術です」-真実ではありません。統計プログラマーであれば、SEOは芸術ではなく、数学的な認識スキルです。プログラミングに熟練した数学の卒業生または数学に熟練したプログラマーは、Webデータプロファイリング業界で高い需要があります。
שינתיאאבישגנת


32

これはあなたのすべての質問に答えるわけではありませんが、あなたとあなたがクロールするサイトに役立つと信じています。

注意を引くことなくWebサイトをブルートフォースするために使用される手法と同様に、クロールする必要があるサイトのプールが十分に大きい場合、他のすべてのサイトの次のページをクロールするまで、サイトの次のページをクロールしないでください。さて、最新のサーバーではHTTP接続の再利用が許可されるため、オーバーヘッドを最小限に抑えるために複数の操作を行うこともできますが、その考え方は依然として有効です。次のサイトに移動するまで、1つのサイトをクロールして使い尽くさないでください。愛を共有します。

1日の終わりには、同じ数のページをクロールできますが、1つのサイトの平均帯域幅使用量ははるかに少なくなります。

運命のofになることを避けたいなら、確実な方法はありません。誰かが豆を鼻突き刺したいなら、彼らはあなたが予測できないようなやり方でそうするでしょう。そうは言っても、時々有効なページを見逃すことを気にしないなら、あなたがそれをたどらないようにするリンクの単語のブラックリストを用意してください。例えば:

  • 削除する
  • 削除する
  • 更新
  • 編集
  • 変更する

誰にでもできるわけではありませんが、時にはあなたは人々がつらい方法を学ばなければならないのを防ぐことができません;)


3
「愛を分かち合う」ことに関する良いアドバイス-それはまったく考慮していませんでしたが、もちろん振り返ってみると明らかです。
アーロンノート

robots.txtに言及すれば、あなたの答えはほぼ完璧です;)
deadalnix

7
@deadalnix、しかしrobots.txt質問ですでに言及されており、想定されるように取られるかもしれません。
TRiG

20

私のちょっとしたアドバイスは、あなたがクロールしているウェブサイトがあなたに言っていることを聞いて、それに応じてクロールを動的に変更することです。

  • サイトは遅いですか?クロールが遅くなるため、DDOSを実行しません。速いですか?それではもう少しクロールしてください!

  • サイトにエラーがありますか?クロールを減らして、既に脅迫されているサイトにストレスをかけないようにします。再試行回数を指数関数的に増やして、サイトのエラーが長くなるほど再試行回数を減らします。ただし、特定のURLパスで1週間のエラーが発生したために不足しているものをすべて確認できるように、後でもう一度試してください。

  • 多くの404を取得していますか?(覚えておいてください、私たちの凝った404ページはサーバー時間もかかります!)おそらくそこにすべてが欠けているので、そのパスでさらなるURLをクロールしないでください。もしfile001.html- file005.htmlがなければ、ドーナツにお金をかけることも間違いfile999.htmlないでしょう!または、おそらくそのパスで何かを取得する時間の割合を減らします。

これは、ターゲットサイトから戻ってくる信号に関係なく同じように実行する1つのロボット戦略を持っているため、多くの素朴なクローラーが非常に間違っている場所だと思います。

スマートクローラーは、対象のサイトに反応します。


19

他の人はマントラのいくつかに言及しましたが、いくつか追加します。

ファイルの種類とサイズに注意してください。これらの巨大なバイナリをプルしないでください。

いくつかの典型的なウェブサーバーの「ディレクトリ一覧」ページ用に最適化します。特に、サイズ、日付、名前、権限などをソートできます。クロールの各ルートを個別のルートとして扱わないでください。

可能な場合は常にgzip(オンザフライ圧縮)を要求します。

深さを制限するか、再帰を検出します(またはその両方)。

ページサイズを制限します。一部のページでは、電子メールを破壊するボットを阻止するためにターピットを実装しています。これは、カタツムリの速度でロードされ、テラバイト長のページです。

404ページをインデックスに登録しないでください。最大のインデックスを誇るエンジンはこれを行い、代わりに当然の憎しみを受け取ります。

これは難しいかもしれませんが、負荷分散ファームの検出を試みてください。v329.host.com/pages/article.php?99999がv132.host.com/pages/article.php?99999と同じ結果を返す場合、v001.host.comからv999までのサーバーの完全なリストをスクレイプしないでください。 host.com


重要なコーナーケース!
M.ダドリー

最近では、正規のタグをチェックすることで、意図的に重複したコンテンツ(負荷分散ファームなど)を検出できることがよくあります。
ブライアン

4

ちょっとだけ追加します。

著作権とその他の法的問題:それらは公開Webサイトであるため、著作権は存在しない可能性がありますが、データの保存にはその他の法的問題がある可能性があります。

これはもちろん、どの国のデータを保存するか(そしてどこに保存するか)に依存します。米国の愛国者法とEUのデータ保護指令の問題の典型的な例。問題のエグゼクティブサマリーは、米国企業がデータを提供する必要があることです。FBIは、ユーザーに通知せずに尋ねられた場合、データ保護指令でユーザーにこのことを通知する必要があると記載されています。Se http://www.itworld.com/government/179977/eu-upset-microsoft-warning-about-us-access-eu-cloud


2
「あなたはそれらが公開ウェブサイトであると書いていることを知っているので、著作権はないかもしれない」。特に明記されていない限り、インターネット上のすべてのWebサイトは公開されており、すべてのWebサイトは著作権で保護されています。
ギャビンコーツ

3

あなたの名前に関連付けられているウェブクローラーまたはそのスパイダーを呼び出します。これは重要。アナリティクスエンジンなどは、あなたを...スパイダーとして関連付けるものを探します。;)

私が行ったことは、リクエストヘッダーUser-Agentを介して行われました


私はそれが通常「ボット」または「ロボット」だと思っていました-GoogleがGooglebotであることは知っています。
アーロンノート

いい視点ね。区別できる限り。おそらくそれらをレイアウトするための投稿があるでしょう。
jcolebrand

2
  • 必要に応じてCookieを保存して、Webサイトが不要なセッションを作成しないようにします。
  • ブラウザに最も近いリンク解析動作を実装します。私たちのライブサイトは、ボットが欠落したファイルを要求するため、多くの「404」を報告します。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.