スクレイピングテクニック - バレないようにする方法を解説

Webスクレイピングをバレないようにどうしたらいい？」Webスクレイピングツールを提供する私たちの元には、このような質問が度々送られてきます。

Octoparseをはじめとした「Webスクレイピングツール」が登場したことで、多くの分野でWebスクレイピングの活用が進んでいます。しかし、Webスクレイピングを問題視する声も少なくありません。例えば、Webスクレイピングによって相手サーバーに負荷が掛かり、最悪サーバーダウンにつながる可能性があります。もし、サーバーダウンによって相手の業務に支障がでたら、損害賠償責任や偽計業務妨害罪などに問われるでしょう。

そのため、Webサイト所有者はWebスクレイピングを制限するために、スクレイピング防止技術を装備して、Webスクレイピングはより困難になっています。しかし、スクレイピングを相手にバレないようにする方法はまだあります。

本記事では、スクレイピングをバレないようにするための5つのヒントを解説します。ちなみに、スクレイピング行為自体は違法ではありません。不安に感じる方は以下の記事も合わせてご覧ください。

スクレイピングは違法？Webスクレイピングに関する10のよくある誤解！
(https://www.octoparse.jp/blog/10-myths-about-web-scraping/)

<h2>スクレイピングがブロックされる原因とは</h2>

Webサイトによっては意図的にスクレイピングをブロックする仕組みを構築しています。スクレイピングは短時間に大量のリクエストを送るため、サーバーの過負荷に耐えきれずサーバーダウンに繋がる可能性もありますし、サイト内で扱っているデータを勝手に取られたくないといった思惑があるからです。

スクレイピングを防ぐ主な方法としては2つ挙げられます。

**1.CAPTCHA（キャプチャ）**
**2.IPアドレスブロック**

CAPTCHA（キャプチャ）は、画像やテキストを用いて、Webサイトにアクセスしているのが人間かコンピューターかを識別するために用いられる手法です。有名なサービスでは、Googleの「reCAPTCHA」などがあります。

IPアドレスブロックは、同一のIPアドレスから短時間で大量のリクエストを検知した場合に、そのIPアドレスからのアクセスを遮断する方法です。こうした手法を活用し、スクレイピングの脅威やそれに伴うリスクを防いでいます。

<h2>スクレイピングをバレないようにする方法4つ</h2>

スクレイピングがブロックされる原因を理解したところで、ここからは相手にスクレイピングをバレないように行う方法を紹介します。

**1. スクレイピングのスピードを落とす**
ほとんどのWebスクレイピング作業は、できるだけ早くデータを取得することを目的としています。当然ながら、Webスクレイピングと比べて、人間がWebサイトにアクセスするスピードは遅くなります。そのため、アクセス速度によって、サイト側はWebスクレイパーからのアクセスであるかどうかを判断できます。アクセスが早すぎることが判明したら、Webスクレイパーの疑いがあると判断され、そのアクセスをブロックします。

つまり、Webサイトに負荷を掛け過ぎないことが重要です。Webスクレイパーのアクセスリクエストの時間を空け、可能な限り低速でスクレイピングします。相手サーバーに負荷を掛けずに優しくすれば、確実にスクレイピングを続けることができます。

Octoparseでは、ワークフロー内のステップの待ち時間を設定して、スクレイピングのスピードをコントロールできます。スクレイピングをより人間的に実行するための「ランダム」を選択することも可能です。
![wx20220726-105406-2x.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262932/87fb20f6-466e-de4f-e2f6-5c160df08dfa.png)

**2. プロキシサーバーを使う**
Webサイトが単一のIPアドレスから、多数のリクエストを検出した場合、そのIPアドレスはブロックされやすくなります。すべてのリクエストを同じIPアドレスから送信しないようにするには「プロキシサーバー」を使用するのが有効です。

プロキシサーバーとは、他のコンピュータの「代理」として他のサーバーと通信するサーバーのことを指します。つまり、真のIPアドレスを隠して、設定したIPアドレスを使ってWebサイトにリクエストを送ることが可能です。

ただし、プロキシサーバーに設定されている単一のIPアドレスだけを使用しても、ブロックされやすい状態は変わりません。そこで、IPアドレスのプールを作成し、異なるIPアドレスをランダムに使用してリクエストを送る必要があります。それをIPローテーションといいます。

クラウドサービスのOctoparseは、それぞれ独自のIPアドレスを持つ何百台のクラウドサーバーによってサポートされています。抽出タスクの実行がクラウドに設定されている場合、ターゲットのWebサイトごとに、さまざまなIPアドレスを介してリクエストが行われるため、追跡される可能性を最小限に抑えられます。また、ローカル抽出であればブロックされないように手動でプロキシを設定できます。
![wx20220726-103858-2x.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262932/822a9e80-750c-f4cc-2fb0-0cf2e0c6eab1.png)


**3. 異なるスクレイピングパターンを適用する**
人間がWebサイトを閲覧する場合はクリックや閲覧時間が不規則になります。しかし、Webスクレイピングは、あらかじめプログラムされた特定のクローリングパターンに従うため、規則的になります。スクレイピングを防ぐ場合は、Webサイトで実行された規則的なスクレイピング動作を識別することで、クローラーを簡単に検出できるのです。

そのため、Webスクレイピングでは、スクレイピングパターンを都度変更して、ランダムなクリック、マウスの動き、リクエストなどを、より人間的にするための待ち時間をワークフローに組み込む必要があります。

Octoparseでは、3〜5分程度で簡単にワークフローを設定できます。ドラッグ＆ポイントを使用してクリックやマウスの動きを追加したり、ワークフローをすばやく再構築したりすることで、開発エンジニアのコーディング時間を大幅に節約し、非エンジニア担当者が独自のスクレイパーを簡単に作成できるようにします。

**4. ユーザーエージェントを切り替える**
ユーザーエージェント（UA）は、リクエストのヘッダーにある文字列で、Webサーバーに対するブラウザとオペレーティングシステムを識別します。Webブラウザによるすべてのリクエストには、ユーザーエージェントが含まれています。

一つだけのユーザーエージェントで異常に多数のリクエストを送信すると、ブロックされる可能性があります。ブロックを回避するためには、ユーザーエージェントを頻繁に切り替える必要があります。

多くのプログラマーは、偽造されたユーザーエージェントをヘッダーに追加するか、ブロックされないように手動でユーザーエージェントのリストを作成します。Octoparseを使用すると、ユーザーエージェントの切り替えを自動化できるため、ブロックされるリスクを減らすことができます。
![wx20220726-104104-2x.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262932/ca8bbcbc-58c4-c186-e7be-0087a8782bf2.png)

**5. ハニーポットトラップに注意する**
ハニーポットとは、わざと不正アクセスやサイバー攻撃を受けやすいように設定した機器を徹底的に監視して相手の手口を分析する手法のことです。

通常の訪問者には見えないリンクで、HTMLコード内にあり、Webスクレイパーによって見つけることができます。つまり、スクレイパーがハニーポットページを閲覧すると、そのWebサイトはそれが人間の訪問者ではないことを識別でき、そのクライアントからのすべてのリクエストを抑制またはブロックします。

特定のサイト用のスクレイパーを作成するときは、標準のブラウザを使用してユーザーに隠されたリンクがあるかどうかを慎重に確認することをお勧めします。

Octoparseは、偽のリンクをクリックしないように、正確なキャプチャやクリック操作にXPathを使用します。


<h2>まとめ</h2>

本記事ではWebスクレイピングを相手サーバーにバレないようにするためのヒントを5つ紹介しました。紹介したヒントを活用することで、完璧とはいえませんが、ある程度バレないようにするのに役立ちます。

プロキシサービスも提供しているOctoparseでは、他のスクレイピングツールと異なり、すべてのユーザーがカスタマイズ可能なプロキシを追加できます。リーズナブルな価格で、自身の目的・用途にあわせて、独自のプロキシトラフィックの利用が可能になります。

またWebスクレイピングの技術を使って、日々の業務を自動化すること自体は違反ではありませんが、当然ながら悪用することや相手に不利益になることは出来ませんので、使い方には注意しましょう。