用語集

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

User-AgentはHTTPリクエストヘッダーで、リクエストを行うクライアントソフトウェアを識別します。通常、ブラウザ名、バージョン、OS、レンダリングエンジンなどが含まれます。例:'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'。

User-Agentの文字列、ウェブサイトがスクレイパーを識別するための最も簡単なシグナルである理由、およびフィンガープリントを崩さずにIPとともにUser-Agentをローテーションする方法を理解する。

解説

User-Agentヘッダーは、ウェブ上で最も古い識別情報の一つです。クライアントが送信するすべてのHTTPリクエストには、クライアントソフトウェア(ブラウザまたはライブラリ)、そのバージョン、オペレーティングシステム、そして多くの場合レンダリングエンジンを示す`User-Agent:`行が含まれています。サーバーはこれをコンテンツネゴシエーション(モバイルとデスクトップのレイアウト)、アナリティクス、そして近年ではボット検出に利用しています。

スクレイピングにおいて、User-Agentは最も簡単に間違いを犯しやすいシグナルです。一般的なHTTPライブラリのデフォルトUser-Agent(`python-requests/2.31.0`、`axios/1.5.0`、`okhttp/4.10.0`)はすぐに見破られます。PlaywrightやPuppeteerのデフォルトUser-Agentでさえ`HeadlessChrome`が含まれており、アンチボットシステムに即座にフラグを立てられます。

単純な対処法は、すべてのリクエストにChrome UAを設定することです。ただし、User-Agentだけでは不十分です。現代のフィンガープリンティングは、UAを`sec-ch-ua`クライアントヒント、TLSフィンガープリント、JavaScriptのnavigatorオブジェクト、Accept-Languageヘッダーと照合します。Chrome UAを設定しつつPythonのTLSハンドシェイクを露出させたままにすると、デフォルトのUAをそのままにしておくよりも大きな警告フラグになります。

仕組み

クライアントがサーバーへの接続を開くと、リクエストラインにはヘッダーが含まれます。`User-Agent`の行はその一つです。サーバーはそれを解析(またはログに記録)し、確認した内容に基づいてリクエストをルーティングします。Windows上の最新のChrome User-Agentは次のようになります:`Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36`。「Mozilla/5.0」プレフィックスは歴史的なものであり、すべてのブラウザがレガシー互換性のためにこれを送信します。

実際のブラウザは、現代のHTTPでは`sec-ch-ua`(「Sec-CH-UA」Client Hints)ヘッダーも送信し、構造化されたブラウザ・バージョン・プラットフォームのデータを伝えます。アンチボットシステムはこれらをUser-Agent文字列と比較し、不整合を検出します。そのため、User-Agentのローテーションは、一貫した`sec-ch-ua-*`の更新および一致するTLSフィンガープリントと組み合わせる必要があります。

デスクトップブラウザUser-Agent

Windows/macOS/Linux 上の Chrome、Firefox、Edge、Safari。一般的な Web ターゲットのスクレイピングで最も一般的な UA ファミリーです。

モバイルブラウザのUser-Agent

Android の Chrome、iOS の Safari、Samsung Internet。モバイル向けサイトのスクレイピングや、フィンガープリントの一貫性を保つためにモバイルプロキシと組み合わせる場合に必要です。

ボット / クローラーのUser-Agent

`Googlebot/2.1`、`bingbot/2.0` などの UA を識別します。正規の検索エンジン クローラーが使用し、一部のサイトはこれらをホワイトリストに登録しています。スプーフィングは法的リスクや ToS 違反につながる可能性があります。

ライブラリのデフォルトUser-Agent

`python-requests/X.Y`、`curl/X.Y`、`Mozilla/5.0 (compatible; Java/X.Y)`。HTTPライブラリのデフォルトUA — 本番スクレイピングには絶対に使用しないでください。簡単に識別されます。

主な使用事例

コンテンツ ネゴシエーションのためにクライアントのブラウザと OS を識別する
サーバーサイドの分析と訪問者セグメンテーション
ボット検出(デフォルトライブラリのUser-Agentは即座に見破られます)
モバイルとデスクトップのレイアウト選択
ブラウザファミリー別のキャッシュ
スクレイパーでのUser-Agent ローテーションによる多様な実ユーザーの模倣
FAQ

よくある質問

よくある質問: ユーザーエージェント.

最近数ヶ月以内にリリースされた実際のブラウザバージョンと一致する、現在の主流のUser-Agentを使用してください。WindowsまたはmacOS上のChromeが安全なデフォルトです。すべてのリクエストに1つの固定UAを使用するのではなく、現在のUAの小さなプールでローテーションしてください。

リクエスト間でローテーションしますが、任意に行うわけではありません。セッション(ワークフローに関連するリクエストのクラスター)のライフタイム中は1つのUAを維持し、セッション終了時に切り替えます。実際のユーザーはページ読み込みのたびにブラウザを変更しないため、リクエストごとにランダムにUAを変更すること自体がフィンガープリントのシグナルになります。

おそらくフィンガープリントの不一致が原因です。Chrome UAを設定していてもTLSハンドシェイクがPythonのデフォルトであれば、アンチボットベンダーはその不整合を検出します。UAを一致する`sec-ch-ua`ヘッダー、一致するTLSフィンガープリント(`curl_cffi`または実際のブラウザを使用)、および信頼できるAccept-Languageと組み合わせてください。そうすることでUAローテーションが実際に効果を発揮します。

最新の状態を保つ。ブラウザのバージョンは2〜6週間ごとにリリースされる。2026年にChrome 95のUser-Agentを使用していると、実際のユーザーはもうChrome 95を使っていないため不審に見える。プールを毎月更新するか、ua-parser/ua-parser-jsの公開データセットのような最新のUAソースから取得すること。

はい、User-AgentがChromiumベース(Chrome、Edge、Opera)であると主張している場合に使用できます。最新のChromiumブラウザは`sec-ch-ua`、`sec-ch-ua-mobile`、`sec-ch-ua-platform`ヘッダーを送信します。UAがChromeなのにこれらのヘッダーが欠けている場合、アンチボットシステムが不一致を検出します。

はい、ほとんどの法域で合法です。User-Agentヘッダーはクライアントが制御する単なる文字列です。内容を何に設定しても、それ自体は合法です。その結果得られるアクセスで何をするかの合法性は、アクセス先の利用規約、アンチボット法(米国のCFAA)、および収集するデータによって異なります。偽装したUAを使用した公開データのスクレイピングは広く合法ですが、認証の回避は合法ではありません。