Anonim

私はクライアントのためにウェブサイトを運営しており、彼らは長年にわたって正確かつゆっくりと収集した情報の大規模なデータベースを表示しています。 彼らはウェブ上のさまざまな場所でデータを見つけています。 おそらく、スクレーパーがサイトをページごとに調べて、必要な情報を独自のデータベースに抽出するためです。 そして、あなたが不思議に思っている場合、彼らはサイトの各カテゴリに単一の植え付けられたデータのために、それが彼らのデータであることを知っています。

過去数日間、これについて多くの調査を行ってきましたが、完璧な包括的な解決策はないことをお伝えできます。 しかし、これを達成するのを少し難しくするためにやるべきことがいくつかあります。 これがクライアント用に実装したものです。

改ページされたページ分割データ

ページ分割されたデータが多数あり、URLの最後に別の番号を追加するだけでデータをページ分割している場合、つまりhttp://www.domain.com/category/programming/2 –次に作成していますクローラーの仕事はずっと簡単です。 最初の問題は、簡単に識別できるパターンであるため、これらのページでスクレーパーを緩く設定するのは簡単です。 2番目の問題は、カテゴリ内の後続ページのURLに関係なく、次のリンクと前のリンクが存在する可能性が高いことです。

ページをリロードすることなく、ページングされたデータをjavascriptを介してロードすることにより、多くのスクレイパーの仕事が大幅に複雑になります。 Googleはごく最近、ページ上でJavaScriptの解析を開始しました。 このようなデータをリロードすることには、ほとんど不利な点はありません。 Googleがインデックスを作成するページをいくつか減らしますが、技術的には、ページ分割されたデータはすべて、正規化によってルートカテゴリページを指す必要があります。 ページングされたデータのページをAjaxifyします。

テンプレート出力をランダム化する

スクレーパーは、多くの場合、データ用にわずかにカスタマイズされます。 タイトルの特定のdiv idまたはクラス、説明の各行の3番目のセルなどにラッチします。ほとんどのスクレイパーが同じテーブルからのほとんどのデータを処理するための簡単に識別可能なパターンがあります。同じテンプレートで表示されます。 div idとクラス名をランダム化し、空白のテーブル列を幅0でランダムに挿入します。 あるページの表、スタイル付きdiv、および別のテンプレートの組み合わせにデータを表示します。 データを予測可能に提示することにより、データを予測可能かつ正確にスクレイピングできます。

ハニーポット

これは、その単純さの点で非常に適切です。 サイトスクレイピングの防止に関するいくつかのページでこの方法に出会いました。

  • サーバーにgotcha.htmlという名前の新しいファイルを作成します。
  • robots.txtファイルに、次を追加します。
    ユーザーエージェント: *
    禁止:/gotcha.html

    これにより、すべてのロボットとスパイダーがサイトにインデックスを付け、gotcha.htmlファイルのインデックスを作成しないようにします。 通常のWebクローラーは、robots.txtファイルの希望を尊重し、そのファイルにアクセスしません。 つまり、GoogleとBing。 実際にこのステップを実装し、24時間待ってから次のステップに進むことができます。 これにより、robots.txtファイルを更新したときに既にクロールの途中でクローラーがブロックされないようになります。
  • gotcha.htmlへのリンクをWebサイトのどこかに配置します。 どこでも構いません。 フッターではお勧めしますが、このリンクがCSSでdisplay:noneに表示されないようにしてください。
  • ここで、このページにアクセスしたperpのIP /一般情報を記録し、それらをブロックします。 または、不正確で不要なデータを提供するスクリプトを作成することもできます。 または、あなたからの素敵な個人的なメッセージかもしれません。

通常のWebビューアはリンクを見ることができないため、誤ってリンクがクリックされることはありません。 信頼できるクローラー(Googleなど)は、robots.txtの希望を尊重し、ファイルにはアクセスしません。 そのため、このページに出くわす必要があるのは、悪意のあるコンピューター、またはソースコードを表示してランダムにクリックしているコンピューターだけです(それが発生した場合はまあまあです)。

これが常に機能するとは限らない理由がいくつかあります。 まず、多くのスクレイパーは通常のWebクローラーのようには機能せず、サイトのすべてのページからすべてのリンクをたどってデータを検出するだけではありません。 スクレーパーは、特定のページで修正し、特定の構造のみに従うように構築されることがよくあります。 たとえば、スクレイパーはカテゴリページで開始され、スラッグに/ dataという単語が含まれるURLにのみアクセスするように指示されます。 第二に、誰かが他の人と同じネットワーク上でスクレーパーを実行しており、共有IPが使用されている場合、ネットワーク全体を禁止することになります。 これが問題になるためには、非常に人気のあるWebサイトが必要です。

その場で画像にデータを書き込む

ページのスタイリングが少し難しくなる可能性があるため、必ずしも長いテキスト文字列ではなく、より小さなデータフィールドを見つけます。 このデータを画像内に出力します。ほぼすべてのプログラミング言語に、画像にテキストを動的に書き込む方法(php、imagettftext)があると確信しています。 数値はSEOの利点をはるかに小さくするため、これはおそらく数値で最も効果的です。

代替案

これは、このプロジェクトのオプションではありませんでした。 特定のページビュー数の後にログインを要求するか、ログインせずに限られた量のデータを表示します。つまり、10カラムがある場合、5からログインしていないユーザーのみを表示します。

この間違いをしないでください

ボットのユーザーエージェントに基づいた何らかの解決策を考え出そうとしないでください。 この情報は、自分が何をしているのかを知っているスクレイパーによって簡単に偽装される可能性があります。 たとえば、Googleボットは簡単にエミュレートできます。 おそらくGoogleを禁止したくないでしょう。

サイトスクレイピングの防止