WebスクレイピングとCAPTCHA

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

セキュリティーのためとはいえ、インターネット上でのアクティビティを中断して行う作業であるため、デメリットもいくつかあります。一般ユーザがCAPTCHAに引っかかるのは特段問題とはならず「時間がかかる厄介者」であるだけですが、自動で価格、在庫、SNS投稿データをクローリング、大規模に収集するようなツールにとっては、CAPTCHAは非常に邪魔な存在で安定的なデータ取得作業を行う上での障壁の一つです。

この記事では、CAPTCHAとWebスクレイピングについて解説します。

CAPTCHA概要

先ほどご紹介した通り、CAPTCHAと呼ばれるものは「人間とそれ以外を判別するもの」で、「Completely Automated Public Turing test to tell Computers and Humans Apart」の略称です。CAPTCHAも時代と共に改善されてきており、仕様も大きく変わってきています。インターネット黎明期は、意図的に崩して表示された文字列を入力させることにより人間の判別する仕様が一般的でしたが、今では「煙突の画像を選択せよ」などといった仕様が一般的となっていて、ブラウザ上での行動パターンなどのデータを基にCAPTCHAが要求されているようです。

いずれの仕様のCAPTCHAであれ、目的は同じで、それは「人間にしか判断がつかないような質問を投げかけること」です。AIなどの技術が進化した今でも、人間に見せかけることは可能ではありますが、簡単なことではないのです。コンピュータに誤認識させるように歪ませた文字列を正確に読み取るのは、今のテクノロジーでも難しく、人間の方が高確率で認識することができます。

CAPTCHA要求の確率を高めてしまうアクティビティ

データ収集・スクレイピングを行うことは、CAPTCHAなどのWebサイト制限との闘いでもあります。通常のアクティビティではない動き、つまり1つのIPから大量のリクエストが合ったりすると、それが異常だと検出され、ロボットだと認識される可能性が高まるためです。

例えば、VPNの使用などはリスクを高めます。VPN(仮想プライベートネットワーク)は世界中のサーバーを使用しトラフィックを流すわけですし、多くの場合は多数のユーザとの共有がされています。特に無料のVPNを使用することは非常にリスキーで、頻繁にCAPTCHA要求されることに気づくでしょう。

また、前述の通りブラウザ上での行動パターンも重要です。ロボットと違い、人間は機械的な動きは行いません。人間がネットサーフィンを行っている時に、1秒間で複数のリンクをクリックすることも通常はないですし、そのような動きをするとロボットの自動的な行動だと認識され、CAPTCHA要求されることでしょう。また、最悪の場合、悪質なアクセスだと認識されてアクセス自体をブロックされてしまう可能性もあります。

CAPTCHAをバイパスする方法

前述でCAPTCHA要求の確率を高めてしまうアクティビティについてご説明しましたが、それをバイパス(回避)するためには、その逆の動きをすることが求められます。

まず、1つのIPアドレスから不審に思われるようなデータ量を要求したり、短時間で人間のアクションとは思えないほどの数のリクエストをしないこと。これは人間が手動でブラウジングしている時もそうですし、CAPTCHAをバイパスしてデータの自動収集を試行する時も心がけることの1つです。

よって、IP使用率を管理し、1つのIPアドレスから大量のトラフィックを流さないことや、短期間で何度もデータを取得しないことは、CAPTCHAのバイパスに効果的と言えるでしょう。例えば、スクレイピングのスピードをわざと落としてターゲットサイトのサーバーに負荷をかけ過ぎないことや、時間を開けてスクレイピングしてコンピュータの動きだとは思わせないことなど、まるで人間かのような動きをすることは、CAPTCHAのバイパスに役立つでしょう。

次に、行動パターンです。実際のユーザが行う動きをロボットがすると、Webサイト運営側はそれをロボットの行動だと検出するのは難しいでしょう。マウスの動き、クリック数やそのパターンなど、実際のユーザが行う動きをすることは、Web制限にかからずにスクレイピングを実施するためには非常に重要なことと言えます。

その他にも、どのデバイスからアクセスしているのか、どのブラウザを使用しているのか、どの国どの都市からアクセスしてきているのか、アクセス元つまりどのWebサイトのリンクを押してランディングしてきたのかなども、CAPTCHAをバイパスする上で考えるべきことの1つです。スクレイピングをする上で、プロキシサーバーを使用して、ターゲットサイトを複数のIPアドレスからデータ取得するような動きは、同一人物のアクティビティだとは認識されない可能性が高まります。

まとめ

この記事では、CAPTCHAの説明や、安全にWebスクレイピングを行うコツなどのご紹介しました。CAPTCHA側の検出能力も日々向上しているので100%安全な方法というのは難しいですが、安全なスクレイピングを行うためには必要な知識だと思います。

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

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 分読