web-dev-qa-db-ja.com

Webサイトをクロールするとき、どうすればよい市民になることができますか?

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

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

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

  • 並列リクエストの数
  • リクエスト間の時間
  • クロール全体の間隔
  • 潜在的に破壊的なリンクを回避する(- Spider of Doom になりたくない)しかし、これが実用的かどうかは誰にもわかりません)

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

83
Aaronaught

Robots.txtに従うだけでなく、<meta>要素およびリンクのnofollowおよびnoindexに従います。

  • 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スプーフィングやクロールパターンを意図的にマスキングするなどのブラックハットテクニックに頼らない限り、困難な戦いになるでしょう。多くのサイト所有者は、上記と同じ理由で、未知のクローラーを目にすることなくブロックします。 「自分のサイトをハッキング」しようとしない人がいる可能性。たくさんの失敗に備える。

未知のクローラが持つであろうネガティブなイメージと戦うためにあなたができることの一つは、あなたが誰であるかをあなたのユーザーエージェント文字列で明らかにすることです:

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つの簡単な手順(メールアドレスまたは理想的にはフォーム)で包括的(「落とし穴」はないはずです。オプトアウトは、例外なくクロールを停止することを意味します)。

85
user8

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

注意を引くことなくWebサイトをブルートフォースでブルートフォースする手法と同様に、クロールする必要があるサイトのプールが十分にある場合は、他のすべてのサイトの次のページをクロールするまで、サイトの次のページをクロールしないでください。 。まあ、最近のサーバーは HTTP接続の再利用 を許可するので、オーバーヘッドを最小限に抑えるために複数の処理を実行する必要があるかもしれませんが、アイデアはまだ残っています。 次のサイトに移動するまで、1つのサイトを完全にクロールしないでください。愛を分かち合う。

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

ドゥームのスパイダーになりたくない場合、確実な方法はありません。誰かが 豆を鼻に突き刺す を望んでいる場合、彼らはおそらくあなたが予測できない方法でそうするでしょう。とはいえ、時々有効なページを見逃しても構わない場合は、リンクをたどらないリンクの単語のブラックリストを用意してください。例えば:

  • 削除する
  • 削除する
  • 更新
  • 編集する
  • 修正

誰にでもできることではありませんが、人々が難しい方法を学ばなければならないことを防ぐことができない場合もあります;)

32
Dan McGrath

私のちょっとしたアドバイスはlistenクロールするWebサイトが伝えていることを聞き、それに応じてクロールを動的に変更することです。

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

  • サイトにエラーがありますか?クロールを減らすことで、すでに強要されているサイトにストレスをかける必要がなくなります。指数関数的に増加する再試行時間を使用して、サイトのエラーが長くなるほど再試行回数を減らします。ただし、最終的には後で再試行することを忘れないでください。特定のURLパスでの1週間のエラーなどにより、不足しているものをすべて確認できます。

  • 404をたくさん取得していますか? (私たちの派手な404ページもサーバーの時間がかかることを忘れないでください!)おそらくすべての行方が欠落しているので、今のところそのパスでそれ以上のURLをクロールしないでください。もしfile001.html-file005.htmlはありません。あなたにドルをドーナツに賭けますfile999.htmlもそうではありません!または、そのパスで何かを取得する時間の割合を下げることもできます。

これは、ターゲットサイトから返される信号に関係なく、同じように実行する1つのロボット戦略を持っているため、多くの単純なクローラーが深刻な誤りを犯している場所だと思います。

スマートクローラーは、接触しているターゲットサイトに対してreactiveです。

20
Jeff Atwood

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

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

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

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

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

ページサイズを制限します。一部のページは、メールを破棄するボットを阻止するターピットを実装しています。これは、かたつむりの速度で読み込まれ、テラバイト長のページです。

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

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

19
SF.

少しだけ追加します。

著作権とその他の法的問題:公開ウェブサイトであるため、著作権はないかもしれませんが、データの保存には他の法的問題があるかもしれません。

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

4
Holger

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

私が見た方法は、要求ヘッダーUser-Agentを介して

3
jcolebrand
  • 必要に応じてCookieを保存し、Webサイトが不要なセッションを作成しないようにします。
  • ブラウザーに最も近いリンク解析動作を実装します。私たちのライブサイトは、不足しているファイルに対するボットのリクエストにより、多くの「404」を報告しています。
2
Valera Kolupaev