WebスクレイピングのためのUser-Agentsに関するヒント

データスクレイピングを実行する際に正しいユーザーエージェントを使用することは、ブロックを回避しつつターゲットデータを成功裏に収集する上で非常に重要です。ここにあるガイドだけで始めることができます。
2 分読
Chrome browser and web scraping to data collection

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

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

この用語は、エンドユーザーとウェブコンテンツとの対話処理を容易にするソフトウェア全般を指します。ユーザーエージェント(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 () ()

すべてのブラウザは、platformRV(リリースバージョン)など、独自のコメントコンポーネントを追加します。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が禁止されるのを回避するためのヒント:

#1:実際のユーザーエージェントを使用する

ユーザーエージェントが主要なブラウザに属していない場合、一部のウェブサイトはそのリクエストをブロックします。ボットベースのウェブスクレイパーの多くは、UAを定義するステップを省略しており、その結果、誤った/デフォルトのUAが見つからないために検出され、禁止されます。

この問題を回避するには、広く使用されているUAをウェブクローラーに設定します。 一般的なユーザーエージェントの大規模なリストはこちらから確認できます。ウェブサイトに対してcURLリクエストを実行することで、一般的な文字列をリストアップして、ローテーションできます。とはいえ、ブラウザのユーザーエージェントを使用することをお勧めします。これは、ブラウザの動作をあまり変更しない方が、ユーザーエージェントから期待される動作とブラウザの動作が一致する可能性が高いためです。

#2:ユーザーエージェントをローテーションさせる

ウェブスクレイピング中に多数のリクエストを行う場合、リクエストをランダム化する必要があります。これにより、ウェブサーバーがUAを識別してブロックする可能性を最小限に抑えられます。

リクエストをランダム化するにはどうすればよいですか?

1つの解決策は、プロキシをローテーションさせてリクエストIPアドレスを変更することです。こうすることで、毎回異なるヘッダーセットを送信できます。ウェブサーバー側からは、リクエストが異なるコンピューターや異なるブラウザから送信されているように見えます。

プロからのアドバイス:ユーザーエージェントはヘッダーですが、ヘッダーにはユーザーエージェント以外にも多くのものが含まれています。ヘッダーをランダムに送信するだけでは不十分です。送信するユーザーエージェントが、送信するヘッダーと一致していることを確認する必要があります。

botcheck.luminatio.ioを使って、送信するヘッダーがユーザーエージェントに期待されるものと一致するかどうかを確認できます。

ユーザーエージェントをローテーションする方法

最初に、ユーザーエージェント文字列のリストを収集する必要があります。実際のブラウザの文字列を使用することをお勧めします。詳しくは、こちらをご覧ください。次のステップでは、文字列をPythonリストに追加します。そして最後に、すべてのリクエストがリストからランダムな文字列を選択するように定義します。

Python 3とSelenium 4を使用してユーザーエージェントをローテーションさせる方法の例については、スタックオーバーフローに関する論考をご覧ください。コード例は次のようになります。

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

UAヘッダーのローテーションに使用するプログラムや方法にかかわらず、検出されてブロックされないようにするには、同じテクニックに従う必要があります。

  • #1:各UAに関連付けられたヘッダーをフルセットでローテーションさせる
  • #2:実際のブラウザが通常行う順序でヘッダーを送信する
  • #3:前にアクセスしたページを「参照元ヘッダー」として使用する

プロからのアドバイス:リファラヘッダーを使用する場合は、IPアドレスとCookieが変化しないようにする必要があります。理想は、実際に前のページにアクセスして、ターゲットサーバーにその記録が残るようにすることです。

#3:プロキシを使用してエージェントをローテーションさせる

ローテーションプロキシネットワークを使用することで、リストを手動で定義したり、IPを手動でローテーションさせたりするという頭痛の種や手間を省くことができます。プロキシには、自動IPローテーションとUA文字列ローテーションを設定する機能があります。これは、リクエストがさまざまなウェブブラウザから発信されたように見えることを意味します。これにより、リクエストが実際のウェブユーザーから発信されたように見えるため、ブロックが大幅に減少し、成功率が向上します。ユーザーエージェントを適切に管理し、ローテーションできるのは、データブロック解除技術を採用した非常に限定されたプロキシだけであることを念頭に置いてください。

スクレイピング用User-Agentのリスト

ブラウザ、電話、デバイス、ロボット、検索エンジン、開発者ツールベースのUser-Agentは多種多様であり、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スマートフォン: 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の検索エンジンボット: Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)
  • Googleの検索エンジンボット: 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を適切にローテーションする方法を学ぶことは、サイトブロックを回避する上で重要です。正しいユーザーエージェントを使用することで、リクエストが有効な発信元から来たことをターゲットのウェブサイトに伝え、目的のターゲットサイトから自由にデータを収集できるようになります。

Bright Dataは、完全に自動化されたデータロック解除ソリューションを開発し、機械学習アルゴリズムを使用してサイト固有のブラウザユーザーエージェントを生成し、ボット検出システムを回避することで、チームの時間とリソースを節約します。

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

web scraping with claude blog image
ウェブデータ

2025年のクロードによるウェブスクレイピング

Pythonを使ってWebスクレイピングを自動化し、構造化データを楽に抽出するClaude AIの使い方を学ぶ。
18 分読
Building AI-Ready Vector Datasets for LLMs blog image
AI

LLMのためのAI対応ベクトルデータセット構築:Bright Data、Google Gemini、Pineconeを使ったガイド

大規模言語モデル(LLM)は、私たちが情報にアクセスし、インテリジェントなアプリケーションを構築する方法を変革しています。LLMの可能性を最大限に引き出すには、特にドメイン固有の知識や独自のデータを使用する場合、高品質で構造化されたベクトルデータセットを作成することが重要です。LLMの性能と精度は、入力データの品質に直接結びついています。準備不足のデータセットは劣悪な結果をもたらす可能性があり、一方、十分にキュレーションされたデータセットはLLMを真のドメイン・エキスパートに変えることができます。 このガイドでは、AIに対応したベクターデータセットを生成するための自動パイプラインの構築方法を順を追って説明する。 課題:LLMのためのデータ収集と準備 LLMは膨大な汎用テキストコーパスで学習されますが、商品関連のクエリへの回答、業界ニュースの分析、顧客フィードバックの解釈など、特定のタスクやドメインに適用すると、不足することがよくあります。LLMを真に役立てるには、ユースケースに合わせた高品質のデータが必要です。 このデータは通常、ウェブ上に分散していたり、複雑なサイト構造の背後に隠されていたり、ボット対策によって保護されていたりする。 当社の自動ワークフローは、データセット作成の最も困難な部分を処理する合理化されたパイプラインでこれを解決します: コア技術の概要 パイプラインを構築する前に、関連するコアテクノロジーと、それぞれがワークフローをどのようにサポートしているかを簡単に見ておこう。 ブライトデータスケーラブルなウェブデータ収集 AIに対応したベクターデータセットを作成するための最初のステップは、関連性のある高品質なソースデータを収集することです。ナレッジベースやドキュメンテーションのような内部システムから得られるものもあるが、大部分は公共のウェブから得られることが多い。 しかし、最近のウェブサイトは、CAPTCHA、IPレート制限、ブラウザフィンガープリントなどの高度なボット対策メカニズムを使用しているため、大規模なスクレイピングは困難である。 Bright Dataは、データ収集の複雑さを抽象化するWeb Unlocker APIでこの課題を解決します。プロキシのローテーション、CAPTCHAの解決、ブラウザのエミュレーションを自動的に処理するため、データへのアクセス方法ではなく、データに集中することができます。 Google Gemini: インテリジェント・コンテンツ・トランスフォーメーション Geminiは、Googleによって開発された強力なマルチモーダルAIモデルのファミリーであり、様々なタイプのコンテンツを理解し処理することに優れている。私たちのデータ抽出パイプラインにおいて、Geminiは3つの重要な機能を果たします: このAIを活用したアプローチは、特に以下のような使用例において、脆弱なCSSセレクタや壊れやすい正規表現に依存する従来の方法よりも大きな利点をもたらす: AIがデータ抽出プロセスにどのような変化をもたらしているかについては、Using AI for Web Scrapingをご覧ください。スクレイピングのワークフローにGeminiを実装するための実践的なチュートリアルをお探しの場合は、包括的なガイドをご覧ください:GeminiによるWebスクレイピングをご覧ください。 文の変形意味埋め込み文の生成 エンベッディングは、高次元空間におけるテキスト(または他のデータタイプ)の密なベクトル表現である。これらのベクトルは意味的な意味を捉え、コサイン類似度やユークリッド距離のようなメトリクスを用いて測定される、類似したテキスト片を近接したベクトルで表現することを可能にする。この特性は、セマンティック検索、クラスタリング、検索拡張生成(RAG)のようなアプリケーションで重要である。 Sentence Transformersライブラリは、高品質の文や段落の埋め込みを生成するための使いやすいインターフェースを提供する。Hugging Face Transformersの上に構築され、意味タスクのために微調整された幅広い事前学習済みモデルをサポートしています。 このエコシステムで最も人気があり、効果的なモデルの1つがオールMiniLM-L6-v2である: より大きなモデルはより微妙なエンベディングを提供するかもしれないが、all-MiniLM-L6-v2は性能、効率、コストの間で非常に優れたバランスを提供する。その384次元ベクトルは ほとんどの実用的なユースケース、特に初期段階の開発やリソースに制約のある環境では、このモデルで十分すぎる。エッジケースにおける精度のわずかな低下は、通常、スピードとスケーラビリティの大幅な向上によって相殺されます。そのため、AIアプリケーションの最初のイテレーションを構築する場合や、控えめなインフラストラクチャでパフォーマンスを最適化する場合は、all-MiniLM-L6-v2を使用することをお勧めします。 Pineconeベクトル埋め込み画像の保存と検索 テキストがベクトル埋め込みデータに変換されると、それを効率的に保存、管理、照会するための専用のデータベースが必要になります。従来のデータベースはこのために設計されていません。ベクトル・データベースは、埋め込みデータの高次元の性質を扱うために特別に設計されており、RAGパイプライン、セマンティック検索、パーソナライゼーション、その他のAI駆動型アプリケーションに不可欠なリアルタイムの類似性検索を可能にします。 Pineconeは、開発者フレンドリーなインターフェイス、低レイテンシの検索パフォーマンス、完全に管理されたインフラストラクチャで知られる人気のベクトルデータベースです。ベクトル検索インフラストラクチャの複雑さを抽象化することで、複雑なベクトルインデックスと検索を効率的に管理します。主なコンポーネントは以下の通りです: Pineconeは2つのデプロイメントアーキテクチャを提供する:ServerlessとPod-Based です。ほとんどのユースケース、特に開始時や動的な負荷に対処する場合は、シンプルさとコスト効率からサーバーレスが推奨されます。 セットアップと前提条件 パイプラインを構築する前に、以下のコンポーネントが適切に設定されていることを確認する。 前提条件 各APIキーの生成方法については、以下のツール固有の設定セクションを参照してください。 必要なライブラリのインストール このプロジェクトのコアとなるPythonライブラリをインストールする: これらのライブラリーは提供している: 環境変数の設定 プロジェクトのルート・ディレクトリに.envファイルを作成し、APIキーを追加する: ブライトデータ設定 Bright DataのWeb Unlockerを使用するには: 実装例と統合コードについては、Web Unlocker GitHub […]
6 分読
AI

LLMにおけるスーパーバイズド・ファインチューニングとは?

このPythonガイドでは、概念、ツール、ワークフロー、そしてAIプロジェクトを向上させる実践的な例を取り上げています。
7 分読