この記事では次を習得できます。
ユーザーエージェントとは?
この用語は、エンドユーザーがウェブコンテンツと相互作用することを容易にするあらゆるソフトウェアを指します。ユーザーエージェント(UA)文字列は、クライアントコンピューターソフトウェアがリクエストを介して送信するテキストです。
ユーザーエージェント文字列は、宛先サーバーがどのブラウザ、デバイスのタイプ、およびオペレーティングシステムが使用されているかを識別するのに役立ちます。たとえば、この文字列は、コンピュータ上でChromeブラウザとWindows 10を使用しているサーバーに通知します。サーバーは、この情報を使用して、デバイス、OS、およびブラウザーのタイプに対する応答を調整することができます。
ほとんどのブラウザは、ユーザーエージェントヘッダーを次の形式で送信するが、ユーザーエージェントの選択方法にはあまり一貫性がありません。
User-Agent: Mozilla/5.0 () ()
すべてのブラウザは、プラットフォームやRV(リリースバージョン)などの独自のコメントコンポーネントを追加します。Mozillaには、クローラーに使用する文字列の例があります。
Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
Mozillaブラウザで使用できるさまざまな文字列については、「>開発者のサイト」で詳しく知ることができます。
以下に、Chromeの開発者サイトで、UA文字列フォーマットがさまざまなデバイスやブラウザを検索する方法の例を示します。
Android用Chrome
モバイル端末のUA:
Mozilla/5.0 (Linux; ; )AppleWebKit/ (KHTML, like Gecko) Chrome/Mobile Safari/
タブレットのUA:
Mozilla/5.0 (Linux; ; )AppleWebKit/(KHTML, like Gecko) Chrome/Safari/
なぜユーザーエージェントを使うべきなのか?
ウェブスクレイピングを行っている場合、ウェブサーバーが特定のユーザーエージェントをブロックすることがあります。これは主に、ボットの起点をボットとして認識し、一部のウェブサイトではボットのクローラーやスクレイパーを
許可していないためです。より洗練されたウェブサイトは、逆のやり方をとっています。つまり、クローリングジョブを実行するのに妥当と考えるユーザーエージェントのみを許可します。本当に洗練されたものは、ブラウザの動作が、主張するユーザーエージェントと実際に一致しているかどうかをチェックします。
正しい解決策は、リクエストにユーザーエージェントを含めないことだと思うかもしれません。ただし、この場合、ツールはデフォルトのUAを使用します。多くの場合、宛先ウェブサーバーはブラックリストを持っており、それをブロックします。
それでは、ユーザーエージェントが禁止されないようにするためにはどうすればいいでしょうか?
スクレイピング時にUAが禁止されることを避けるためのTips:
1:実際のユーザーエージェントを使用する
ユーザーエージェントがメジャーブラウザに属していない場合、一部のウェブサイトはそのリクエストをブロックします。多くのボットベースのウェブスクレイパーは、UAを定義するステップを飛ばし、誤った/デフォルトのUAが不足していることで検出され、禁止される結果となります。
この問題を回避するには、ウェブクローラーに広く使用されているUAを設定します。良く使われるユーザーエージェントの一覧はこちらから確認できます。ウェブサイトのcURLリクエストを実行すると、一般的な文字列のリストをコンパイルし、それらの文字列をローテーションできます。ブラウザの動作はユーザーエージェントから期待されるものと一致する可能性が高いため、ブラウザのユーザーエージェントを使用することをお勧めします。
2:ユーザーエージェントをローテーションさせる
ウェブスクレイピング中に多数のリクエストを行う場合は、それらをランダム化する必要があります。これにより、ウェブサーバーがUAを識別してブロックする可能性を最小限に抑えることができます。
リクエストをランダム化する方法は?
ウェブスクレイピング中に多数のリクエストを行う場合は、それらをランダム化する必要があります。これにより、ウェブサーバーがUAを識別してブロックする可能性を最小限に抑えることができます。
リクエストをランダム化する方法は?
一つの解決策は、プロキシのローテーションを使用してリクエストIPアドレスを変更することです。この方法では、1回ごとに異なるヘッダーセットを送信します。ウェブサーバー側では、リクエストが異なるコンピューターや異なるブラウザから送信されたように見えます。
プロからのアドバイス:ユーザーエージェントはヘッダーですが、ヘッダーは単なるユーザーエージェント以上のものです。ランダムヘッダーを送信するだけでなく、送信するユーザーエージェントが送信するヘッダーと一致していることを確認する必要があります。
botcheck.luminatio.ioを使用して、ユーザーエージェントに期待されているものと一致するヘッダーを送信しているかどうかを確認できます
ユーザーエージェントのローテーション方法
まず、ユーザーエージェント文字列のリストを収集する必要があります。本当のブラウザからの文字列を使用することを推奨します。この文字列は、こちらで確認できます。次のステップは、Python Listに文字列を追加することです。.最後に、すべてのリクエストからランダム文字列を選択することを定義します。
このスタックオーバーフローディスカッションでは、Python 3とSelenium 4を使用してユーザーエージェントをローテーションさせる方法の例を示します。コード例は次のようになります。
UAヘッダーのローテーションに使用するプログラムまたはメソッドはどちらも、検出されブロックされないように、同じ手法に従う必要があります。
#1: 1:各UAに関連付けられたヘッダーの完全なセットをローテーションします
#2: 2:実際のブラウザでは、ヘッダーを順番に送信するのが一般的です
#3: 前に訪れたページを「リファラーヘッダー」として使用します
プロからのアドバイス:リファラーヘッダーを使用する場合は、IPアドレスとCookieが変更されないようにする必要があります。理想的には、ターゲットサーバー上にレコードが存在するように、前のページを実際に参照することが望ましいです。
3:プロキシを使用したユーザーエージェントのローテーション
プロキシネットワークのローテーションを使用して、リストを手動で定義し、IPを手動でローテーションさせなければならないという煩雑さを避けることができます。プロキシには、自動IPローテーションとUA文字列ローテーションを設定する機能があります。これは、さまざまなウェブブラウザからリクエストが生成されたように見えることを意味します。これにより、実際のウェブユーザーからのリクエストが発生したように見えるため、障害が大幅に減少し、成功率が上昇します。データアンロック技術を採用している非常に限られたプロキシのみが、ユーザーエージェントを適切に管理し、ローテーションさせる能力を持っていることに留意してください。
スクレイピングのためのユーザーエージェントのリスト
ブラウザ/モバイル端末/デバイス/ボット/検索エンジン/開発者ツールベースのユーザーエージェントは、wget、cURLなどのツールを使用しながら、さまざまなブラウザをエミュレートするために利用することができ、多種多様です。これには以下が含まれます。
- Lynx: Lynx/2.8.8pre.4 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/2.12.23
- Wget: Wget/1.15 (linux-gnu)
- Curl: curl/7.35.0
- HTC: Mozilla/5.0 (Linux; Android 7.0; HTC 10 Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.83 Mobile Safari/537.36
- Google Nexus: Mozilla/5.0 (Linux; U; Android-4.0.3; en-us; Galaxy Nexus Build/IML74K) AppleWebKit/535.7 (KHTML, like Gecko) CrMo/16.0.912.75 Mobile Safari/535.7
- Samsung Galaxy Note 4: Mozilla/5.0 (Linux; Android 6.0.1; SAMSUNG SM-N910F Build/MMB29M) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/4.0 Chrome/44.0.2403.133 Mobile Safari/537.36
- Samsung Galaxy Note 3: Mozilla/5.0 (Linux; Android 5.0; SAMSUNG SM-N900 Build/LRX21V) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/2.1 Chrome/34.0.1847.76 Mobile Safari/537.36
- Samsung Phone: Mozilla/5.0 (Linux; Android 6.0.1; SAMSUNG SM-G570Y Build/MMB29K) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/4.0 Chrome/44.0.2403.133 Mobile Safari/537.36
- Bing’s Search Engine Bot: Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)
- Google’s Search Engine Bot: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
- Apple iPhone: Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1
- Apple iPad: Mozilla/5.0 (iPad; CPU OS 8_4_1 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12H321 Safari/600.1.4
- Microsoft Internet Explorer 11 / IE 11: Mozilla/5.0 (compatible, MSIE 11, Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko
- Microsoft Internet Explorer 10 / IE 10: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0; MDDCJS)
- Microsoft Internet Explorer 9 / IE 9: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0; Trident/5.0)
- Microsoft Internet Explorer 8 / IE 8: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
- Microsoft Internet Explorer 7 / IE 7: Mozilla/5.0 (Windows; U; MSIE 7.0; Windows NT 6.0; en-US)
- Microsoft Internet Explorer 6 / IE 6: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
- Microsoft Edge: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393
- Mozilla Firefox: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:53.0) Gecko/20100101 Firefox/53.0
- Google Chrome: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36
キーポイント
ほとんどのウェブサイトは、有効な、または認識可能なブラウザユーザーエージェントが欠落しているリクエストをブロックするため、UAを正しくローテーションさせる方法を学習することは、サイトによるブロックを回避する上で重要です。正しいUAを使用すると、ターゲットウェブサイトにリクエストが有効な起点から送信されたことを通知し、希望するターゲットサイトからデータを自由に収集できるようになります。
Bright Dataは、完全自動化データアンロックソリューションを開発しました。これは、サイト固有のブラウザユーザーエージェントを生成するための機械学習アルゴリズムを使用し、またボット検出システムを回避することで、チームの時間とリソースを節約します。