遭遇可能5つのスクレイピング防止技術


![passion-leads-us-here.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262932/2bb60057-ad80-ef13-4929-268b8edf0ea6.jpeg)
Photoed by [Ian Schneider](https://unsplash.com/@goian) on Unsplash


ビッグデータの台頭により、[データ分析](https://www.octoparse.jp/blog/top-30-big-data-tools-for-data-analysis/)にWebクローラーを使ってインターネットからデータを取得し始めるようになりました。クローラーを作成するにはさまざまな方法があります。ブラウザーの拡張機能、[Beautiful Soup](https://www.crummy.com/software/BeautifulSoup/bs4/doc/)またはScrapyを使用した[Python](https://www.octoparse.jp/blog/web-scraping-using-python/)コーディング、または[スクレイピングツール](https://www.octoparse.jp/blog/the-10-best-web-scraping-tools/)、例えば [Octoparse] (https://www.octoparse.jp/)などでデータを抽出しています。

ただし、スパイダーとアンチボットの間には常にコーディング戦争があります。Web開発者は、さまざまな種類のスクレイピング防止手法を適用して、Webサイトがスクレイピングされないようにしています。この記事では、5つの最も一般的なスクレイピング防止手法と、それらを回避する方法を紹介しましす。

 

 

#1.IP

WebサイトがWebスクレイピングを検出する最も簡単な方法の1つは、IPトラッキングを使用することです。 Webサイトは、その動作に基づいてIPがロボットであるかどうかを識別できます。Webサイトが、1つのIPアドレスから定期的または短期間内に膨大な数のリクエストが送信されたことを発見した場合、IPがボットであると疑われるため、ブロックされる可能性が高くなります。この場合、スクレイピング対策クローラーを構築するために本当に重要なのは、単位時間あたりの訪問の数と頻度です。発生する可能性のあるいくつかのシナリオを以下に示します。

**シナリオ1：**数秒以内に複数の訪問を行う。人間がこれほど速くブラウジングできる方法はありません。そのため、クローラーが頻繁にリクエストをWebサイトに送信すると、WebサイトはIPをブロックして、それをロボットとして識別します。

**解決策：**スクレイピング速度を遅くします。実行する前に遅延時間（たとえば、「スリープ」機能）を設定するか、2つのステップ間の待機時間を増やすことで解決できます。

**シナリオ2：**まったく同じペースでWebサイトにアクセスします。人間は同じ行動パターンを何度も繰り返すことはありません。一部のWebサイトはリクエストの頻度を監視し、1秒に1回など、まったく同じパターンでリクエストが定期的に送信される場合、スクレイピング防止メカニズムが有効になる可能性が非常に高くなります。

**解決策：**すべてのステップにランダムな遅延時間を設定します。ランダムなスクレイピング速度では、クローラーは、人間がWebサイトを閲覧する方法のように動作します。

**シナリオ3：**高度なスクレイピング防止手法の中には、さまざまなIPからのリクエストを追跡し、それらの平均リクエストを分析するための複雑なアルゴリズムを組み込むものがあります。毎日同じ時間に同じ量の要求を送信したり、同じWebサイトにアクセスしたりするなど、IPの要求が異常な場合、ブロックされます。

**解決策：**IPを定期的に変更してください。ほとんどのVPNサービス、クラウドサーバー、およびプロキシサービスは、IPローテーションを提供できます。これらのローテーションIPを介してリクエストが送信されている場合、クローラーはボットのように振る舞わないため、ブロックされるリスクを減らすことができます。

 

#2.[Captcha] (https://ja.wikipedia.org/wiki/CAPTCHA)

Webサイトでこの種の画像を見たことはありますか？

**1.クリックが必要あり**
![キャプチャー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262932/e176eb92-bda3-28b1-99e2-fe4eaf9a8de3.png)
**2.特定の写真を選択する必要あり**
![キャプチャ2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262932/b7b40a04-44ba-68e2-e1a5-03e1f0216f11.jpeg)
**3.正しい文字列を入力/選択する必要あり**
![キャプチャー3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262932/ff0e7ee2-3e4b-be42-652a-4c844cef20d7.jpeg)

これらはキャプチャーと呼ばれます。Captcaは、「completely automated public Turing test to tell computers and humans apart」（コンピュータと人間を区別する完全に自動化された公開チューリングテスト）のバクロニムです。このプログラムは、劣化した画像、空欄、または方程式さえも含む、人間だけが解決するさまざまな課題を提供します。

現在多くのWebサイトがCaptchaをスクレイピング防止手法として適用しています。Captchaを直接渡すことはかつて非常に困難でした。しかし、最近では、多くのオープンソースツールを適用してCaptchaの問題を解決できるようになりましたが、より高度なプログラミングスキルが必要になる場合があります。一部の人々は、独自の機能ライブラリを構築し、機械学習またはディープラーニングスキルを使用してこのチェックに合格する画像認識技術を作成します。

 

**解決するよりもトリガーしないほうが簡単**

ほとんどの人にとって、最も簡単な方法は、Captchaテストをトリガーしないように、抽出プロセスを遅くするか、ランダム化することです。遅延時間を調整するか、ローテーションIPを使用すると、テストをトリガーする確率を効果的に減らすことができます。

 

#3.ログイン

多くのWebサイト、特にTwitterやFacebookなどのソーシャルメディアプラットフォームは、ログインした後にのみ情報を表示します。これらのようなサイトをクロールするには、クローラーはログ記録手順もシミュレートする必要があります。

Webサイトにログインした後、クローラーはCookieを保存する必要があります。Cookieは、ユーザーの閲覧データを保存する小さなデータです。Cookieがないと、Webサイトはすでにログインしていることを忘れて、再度ログインするように要求します。

さらに、厳密なスクレイピングメカニズムを備えた一部のWebサイトでは、ログイン後も毎日1000行のデータなど、データへの部分的なアクセスのみが許可される場合があります。

 

**ボットはログイン方法を知る必要がある**

1) キーボードとマウスの操作をシミュレートします。クローラーはログインプロセスをシミュレートする必要があります。これには、マウスでテキストボックスと「ログイン」ボタンをクリックするか、キーボードでアカウントとパスワード情報を入力するなどの手順が含まれます。

2) 最初にログインしてから、[Cookie](https://ja.wikipedia.org/wiki/%E3%82%AF%E3%83%83%E3%82%AD%E3%83%BC_(%E6%9B%96%E6%98%A7%E3%81%95%E5%9B%9E%E9%81%BF))を保存します。 Cookieを許可するWebサイトの場合、Cookieを保存してユーザーを記憶します。これらのCookieを使用すると、短期的にWebサイトに再度ログインする必要はありません。このメカニズムのおかげで、クローラーは面倒なログイン手順を回避し、必要な情報を盗むことができます。

3)残念ながら、上記の厳格なスケーピングメカニズムに遭遇した場合、1日1回などの固定頻度でWebサイトを監視するようにクローラーをスケジュールできます。期間内に最新の1000行のデータを取得し、最新のデータを蓄積するようにクローラーをスケジュールします。

 

#4.UA

UAはUser-Agentの略で、ユーザーがどのようにアクセスしたかを識別するためのWebサイトのヘッダーです。オペレーティングシステムとそのバージョン、CPUタイプ、ブラウザ、およびそのバージョン、ブラウザ言語、ブラウザプラグインなどの情報が含まれています。

例： Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11

Webサイトをスクレイピングするときに、クローラーにヘッダーが含まれていない場合、クローラーは自分自身をスクリプトとして識別するだけです（たとえば、クローラーをビルドするためにpythonを使用している場合、クローラーはpythonスクリプトとして表示されます）。Webサイトは、スクリプトからの要求を確実にブロックします。この場合、クローラーはUAヘッダーを備えたブラウザーのふりをして、Webサイトがアクセスできるようにする必要があります。

同じURLでサイトを入力しても、Webサイトは異なるブラウザまたは異なるバージョンに対して異なるページまたは情報を表示することがあります。チャンスとは、あるブラウザと互換性があり、他のブラウザはブロックされる情報です。したがって、正しいページにアクセスできるようにするには、複数のブラウザーとバージョンが必要になります。

 

**ブロックされないように、UAを切り替える**

正しい情報が見つかるまで、UA情報を変更します。複雑なスクレイピング防止手法を適用する一部のデリケートなWebサイトでは、同じUAを長時間使用するとアクセスがブロックされる場合があります。この場合、UA情報を定期的に変更する必要があります。

 

#5.[AJAX](https://ja.wikipedia.org/wiki/Ajax)

最近では、従来のWeb開発手法ではなく、AJAXを使用してより多くのWebサイトが開発されています。 AJAXは、非同期JavaScriptとXMLの略で、Webサイトを非同期に更新する手法です。簡単に言えば、ページ内でわずかな変更のみが行われた場合、Webサイト全体をリロードする必要はありません。

**それでは、WebサイトがAJAXを適用しているかどうかをどのようにして知ることができますか？**

**AJAXを使用しないWebサイト：**Webサイトでわずかな変更を加えただけでも、ページ全体が更新されます。通常、読み込み中のサインが表示され、URLが変更されます。これらのWebサイトでは、このメカニズムを利用して、URLがどのように変化するかのパターンを見つけることができます。次に、クローラーに人間のようなWebサイトをナビゲートする方法を教える代わりに、URLをバッチで生成し、これらのURLから直接情報を抽出できます。

**AJAXを使用したWebサイト：**クリックした場所のみが変更され、読み込み中のサインは表示されません。通常、Web URLは変更されないため、クローラーはそれを簡単な方法で処理する必要があります。

AJAXによって開発された一部の複雑なWebサイトでは、それらのWebサイトで暗号化された方法を見つけ、暗号化されたデータを抽出するために特別な技術が必要になります。暗号化された方法はページによって異なるため、この問題の解決には時間がかかる場合があります。組み込みのJS操作を備えたブラウザーを見つけることができれば、Webサイトを自動的に復号化し、データを抽出できます。 

 

Webスクレイピングおよびアンチスクレイピングの手法は日々進歩しています。この記事を読んでいるとき、おそらくこれらの手法は時代遅れになるでしょう。ただし、Octoparseからいつでもサポートを受けることができます。[Octoparse](https://www.octoparse.jp/)は、誰でも、特に技術的背景のない人でもデータを取得できるようになるために存在します。 [Webスクレイピングツール](https://www.octoparse.jp/)として、これらの5つのスクレイピング防止手法すべてにすぐに展開できるソリューションを提供できます。ビジネスやプロジェクトに強力なWebスクレイピングツールが必要な場合は、お気軽にお問い合わせください！