web-dev-qa-db-ja.com

Webスクレイピングエチケット

これを特に禁止しているとは思われないWebサイトから情報を抽出する単純なWebスクレイピングアプリケーションを作成することを検討しています。

この情報を取得するために他の代替手段(RSS、Webサービスなど)をチェックしましたが、この段階では利用可能なものはありません。

これにもかかわらず、私は自分でいくつかのウェブサイトを開発/維持しているので、ウェブスクレイピングが素朴/貪欲に行われると、他のユーザーにとって物事が遅くなり、一般的に迷惑になることがわかります。

だから、エチケットが関係しているのは:

  1. 1秒/分/時間あたりのリクエスト数。
  2. HTTPユーザーエージェントのコンテンツ。
  3. HTTPリファラーのコンテンツ。
  4. HTTPキャッシュ設定。
  5. 大きなファイル/リソースのバッファサイズ。
  6. 合法性とライセンスの問題。
  7. 使用する優れたツールまたは設計アプローチ。
  8. Robots.txt、これはWebスクレイピングに適していますか、それともクローラー/スパイダーに関連していますか?
  9. リクエスト内のGZipなどの圧縮。

更新

メタに関する次の関連する質問を見つけました: スクリーンエスケープStackOverflowのエチケット 。ジェフアトウッドの答えには、いくつかの役立つ推奨事項があります。

その他の関連するStackOverflowの質問:

htmlスクレイピングのオプション

102
Ash

サイトのrobot.txtリクエストに準拠してください。これはおそらく、サイト上の誰とも話をせずに合意に達するための最良かつ最も倫理的な方法の1つです。

UserAgentヘッダーで適切に識別してください。これにより、サイトはあなたが誰であるかを確認し、サイトの特定の領域を明示的に制限/許可することができます。たとえば、大物のユーザーエージェントを見ると、Googleが以下にリストされており、あなたが誰であるか、ボットがクロールしていることを通知する方法を説明するページを持つ同様のものを考案します。

Googleのユーザーエージェント文字列:Googlebot/1.0([email protected] http://googlebot.com/

サイトがサポートしている場合は、圧縮gzip/deflateを使用してください。これにより、時間とサイトの帯域幅が節約されます。

Robots.txtおよび利用規約に従う必要がある場合は、法的観点からは問題ないはずです(ただし、弁護士でも法的専門家でもありません)。

結局のところ、私は最高のアドバイスは、runrunraygunからの唯一のサイトだと思ったと思います。管理者に連絡して、何が受け入れられるかを確認し、彼らの希望を尊重することで、あなたは遠くに行くことができます。

28
Pat

robots.txtは関連性があります。サイトの態度が人間以外の読者にとってどのようなものであるかを理解するために見てください。その内容についてある程度の認識を示すことで、メールを送信する際に、ウェブ管理者がサイトをスクレイプする際にそのサイトを尊重するように気を付けることができます。

17
Charles Stewart

ウェブマスターにメールを送って、悪意のないスクリプトなどを書いていることを伝え、あなたが何に満足しているのか、どのくらいの頻度で尋ねるかをお勧めします。

友好的なドメインからpdf/Wordドキュメントなどを取得するドメインクローラーを実行します。リクエストしたのは、リクエスト間の5秒のギャップで、夜間のみ実行されます。

9
gingerbreadboy

これは、何をスクレイピングしているのか、どれだけスクレイピングしているのかによって大きく異なります。たとえば、数百ページをクロールするには、約1週間前にスクレーパーを作成する必要がありました。寛大であるために、私は各ページの後に1秒待ちました。データを取り戻すのに数分かかりましたが、サイトの所有者は、私がこのプロセスで残すことができるどんなゆるみにも感謝するだろうと確信しています。

2
Sampson

Webスクレイピングに興味がある人は、この本を読むことを強くお勧めします(エチケットについても説明しているので、この記事に関連があると感じました)。

https://github.com/1040003585/WebScrapingWithPython/blob/master/Packt-Web.Scraping.with.Python.Richard%20Lawson.pdf

スクレイピングの私の経験から、一貫してリクエストを行っている場合、IPブラックリストに登録される可能性があります。この場合は、 storm proxies のような回転プロキシを調べることができます。サイトは実際にあなたがスクレイピング/クロールしているかどうかを区別できないため、robots.txtは常に順守することをお勧めします。

合法性に関しては、私が読んだものからは、少し灰色の領域です。通常、ログインしたユーザーではなくゲストとしてスクレイプした場合、自動化されたリクエストに対して冗長になる可能性のある契約条件に拘束されることはありません。

リクエストの間に大幅な遅延がある限り、robots.txtをフォローし、IPがブラックリストに登録されないようにするための措置を講じてください。

1
DannyMoshe

私が見つけた1つの追加は、リクエストの数に大きな違いを生むことができます:サイト構造を見てください。サイトが動的である場合、必要なデータが見つかる可能性のある場所がいくつかあります。時々1ページに。 On WPカテゴリとアーカイブページには、記事の内容全体が1つの場所にあることがよくあります。それらはエッジケースかもしれませんが、データを多少定期的にスクレイピングすることになり、注目に値することがわかりました回避策がある時間の割合。

TLDR;少し調べれば、何百ものリクエストを保存できる場合があります。

さらに、私は、ウェブマスターから、私が探している情報をただ送ってもらいました。これは、あなたが連絡を取り、ほぼ同じ目標に向かっていることを前提としています(競合他社とは異なります)。

0
Merrill Cook

また、tho Pythonにはグローバルインタープリターロックがあります。GILなど。データを要求している場合、import multithreadingモジュールは、リクエストの完了に時間がかかるため、非常に便利です。同時に、大量のデータを要求している(大量の要求を行っている)場合、アクセスが禁止され、接続がブロックされる可能性があります。テストを行わない限り、しきい値を伝える方法はありません。

0
Elvir Muslic