ウェブスクレイピングのためのUser-Agentsのヒント

データスクレイピングタスクを実行するときに正しいユーザーエージェントを使用することは、ブロックされることを避けつつ、ターゲットデータを収集する上で重要です。このガイドを是非ご活用ください。
Chrome browser and web scraping to data collection
Josh Vanderwillik
Josh Vanderwillik | Product Manager
03-Dec-2020

この記事では次を習得できます。

ユーザーエージェントとは?

この用語は、エンドユーザーがウェブコンテンツと相互作用することを容易にするあらゆるソフトウェアを指します。ユーザーエージェント(UA)文字列は、クライアントコンピューターソフトウェアがリクエストを介して送信するテキストです。

ユーザーエージェント文字列は、宛先サーバーがどのブラウザ、デバイスのタイプ、およびオペレーティングシステムが使用されているかを識別するのに役立ちます。たとえば、この文字列は、コンピュータ上でChromeブラウザとWindows 10を使用しているサーバーに通知します。サーバーは、この情報を使用して、デバイス、OS、およびブラウザーのタイプに対する応答を調整することができます。

ほとんどのブラウザは、ユーザーエージェントヘッダーを次の形式で送信するが、ユーザーエージェントの選択方法にはあまり一貫性がありません。

syntax for choosing a user agent - User-Agent: Mozilla/5.0 (<system-information.) <platform> (<platform-details>) <extensions> white text on grey background

   User-Agent: Mozilla/5.0 () ()

すべてのブラウザは、プラットフォームやRV(リリースバージョン)などの独自のコメントコンポーネントを追加します。Mozillaには、クローラーに使用する文字列の例があります。

Crawler string example - white text on grey background - Mozilla/5.0 (compatible; Googlebot/2.1; +http:://www.google.com/bot.html

Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)

Mozillaブラウザで使用できるさまざまな文字列については、「>開発者のサイト」で詳しく知ることができます。

以下に、Chromeの開発者サイトで、UA文字列フォーマットがさまざまなデバイスやブラウザを検索する方法の例を示します。

Android用Chrome

モバイル端末のUA:

white text on grey background - user agent to collect data as a android linux device or some other mobile device such as an apple iphone

Mozilla/5.0 (Linux; ; )AppleWebKit/ (KHTML, like Gecko) Chrome/Mobile Safari/

タブレットのUA:

White text on grey background - syntax for user-agent to appear as either android tablet or apple ipad

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に文字列を追加することです。.最後に、すべてのリクエストからランダム文字列を選択することを定義します。

white text on grey background coding environment, python code on how to rotate user agents

このスタックオーバーフローディスカッションでは、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は、完全自動化データアンロックソリューションを開発しました。これは、サイト固有のブラウザユーザーエージェントを生成するための機械学習アルゴリズムを使用し、またボット検出システムを回避することで、チームの時間とリソースを節約します。

Josh Vanderwillik
Josh Vanderwillik | Product Manager

Josh is a product manager at Bright Data working on next-gen technology,
specifically in the field of automated data collection: building fingerprint-proof, high
scale web crawlers that are simple to use. He is an active participant in global
webinars which help companies learn cutting edge data collection techniques, and
is now expanding that knowledge base through blogging.

あなたは下記にもご興味がおありかもしれません

Python web scraping guide

Pythonによるウェブスクレイピング – ステップバイステップガイド

Pythonを使ったウェブスクレイピングを学ぶことで、複数のウェブサイトから素早くデータを収集し、時間と労力の両方を節約できます。

Webスクレイピングに関する9の再認識すべきポイント

Webスクレイピングは、良心的な使用目的以外にも利用される可能性があるため、良くないイメージがあります。しかし、Web上に分散的に存在する価格、在庫、物件情報、ホテル空室情報などオルタナティブデータを効率的に取得するためにWebスクレイピングを正しく行うことで、商業的に様々なメリット、価値を得ることができます。同ブログでは、Webスクレイピングに関する通説に関して正し、データドリブンな意思決定に必要なデータソースのエンリッチメントに、同技術がどのように貢献することが可能かをご紹介いたします。
Web scraping with PHP

PHPによるウェブスクレイピング: ステップバイステップガイド

シンプルなPHPのウェブスクレイパーをゼロから簡単に作成し、プログラミングする方法を学びます。
solve_and_prevent_recaptcha

WebスクレイピングとCAPTCHA

ネットサーフィンをしていると、CAPTCHAと呼ばれるセキュリティ認証に遭遇することがあるでしょう。それは、アクセスしているのがロボットやボットではなく人間であることを確認するチェックで、「橋の写真を選んでください」のような要求がされ、ランダムに表示される画像の中から橋の写真だけをクリックする方式が一般的ではないでしょうか。

Java を使ったウェブスクレイピングでミッションクリティカルなデータポイントを解放する方法

データ収集に最適な Java 環境を構築するために、どのサポートツールをダウンロードしたらよいかわかりませんか?HTML からデータポイントを抽出/解析し、CSV 形式に変換する方法がわかりませんか? この投稿は、レコードを整理するのに役立ちます。
What is alternative data

オルタナティブデータとは何か、どのように利用するか

投資会社は、ソーシャルメディア、検索エンジン、消費者の需要データを監視し、ポートフォリオ内の企業が言及されたときにリアルタイムでアラートを取得しています。その方法は以下のとおりです。
How Web Scraping in Microsoft Excel Works - A Detailed Guide

Microsoft Excel を使用したウェブスクレイピングのしくみ – 詳細ガイド

ここでは、Microsoft Excel ワークシートから直接ウェブベースのデータクエリーを実行する方法について、すばやく簡単に手順を紹介します。
How to set up a proxy server on Windows 10

Windows 10でプロキシサーバーを設定する方法

このガイドでは、Windows 10でプロキシサーバーを構成するために必要な手順を説明します。この手順には、プロキシを選択する際の重要なTipsだけでなく、スクリーンショットも含まれています。