この記事であなたは学ぶだろう:
- グーグルAIの概要とは?
- その仕組みと、なぜスクレイピングに価値があるのか。
- Google AI Overviewをスクレイピングする方法をステップバイステップのチュートリアルで説明します。
- それに伴う課題と、それを克服する方法。
さあ、飛び込もう!
グーグルAIの概要とは?
Google AI OverviewはGoogle検索に統合された機能で、検索結果の上部にAIが生成した要約を表示する。その裏側では、Googleの大規模な言語モデルGeminiが活用されている。
これらの概要は、複数のウェブソースからの情報を統合し、ユーザーの問い合わせに対して簡潔な回答を提供するものです。多くの場合、元のソース記事へのリンクが含まれており、ユーザーがより深く掘り下げるのに役立ちます。
2025年5月現在、AIオーバービューは200以上の国と地域、40以上の言語で利用できるようになった。当初、この機能は米国でのみ利用可能だった。
なぜGoogle AIの概要をスクレイピングするのか?
Google AI Overviewの回答は、ジェミニや他のAIプロバイダーが生成できる一般的な回答以上のものである。重要な違いは、SERP(検索エンジン結果ページ)のリンクとそのリンク内のコンテンツに根ざしていることである。
言い換えれば、彼らのコンテンツは、実際の記事やページ、サイトに裏打ちされており、多くの場合、さらに読んだり拡大したりするためのリンクが含まれている。これは、一般的にLLMが苦手とすることである。
したがって、Google AI Overviewsをプログラムでスクレイピングすることで、実際のSERPの結果を活用してRAGに最適化された回答を生成する、AIを搭載したSERPチャットボットのようなものを構築することができる。このアイデアは、現在の検証可能なウェブコンテンツに基づいた回答を得ることです。
この記事の最後で学ぶように、このアプローチは確かに面白いですが、いくつかの固有の課題があります。そこで、RAGを通じてSERPチャットボットを構築する方法について、私たちのガイドを調べることを検討してください。
PythonでGoogle AI概要をスクレイピングする方法:ステップバイステップガイド
このチュートリアルでは、Google AI Overviewをスクレイピングするプロセスを説明します。Pythonスクリプトの作り方を学びます:
- グーグルに接続。
- 検索クエリを実行する。
- AI Overviewのロードを待つ。
- HTMLをスクレイピングする。
- コンテンツをMarkdownに変換します。
- 出力ファイルに書き出す
Google AI Overviewスクレイピングの実行方法は以下の通り!
ステップ1:プロジェクトのセットアップ
始める前に、あなたのマシンにPython 3がインストールされていることを確認してください。インストールされていない場合は、ダウンロードしてインストールウィザードに従ってください。
ターミナルを開き、以下のコマンドを実行する:
mkdir google-ai-overview-scraper
cd google-ai-overview-scraper
python -m venv venv
これらはスクレイパープロジェクト用に新しいフォルダgoogle-ai-overview-scraper/を
作成し、仮想環境を初期化します。
お気に入りのPython IDEでプロジェクトフォルダを読み込みます。PyCharmコミュニティ版か、Python拡張機能付きのVisual Studio Codeが良い選択肢です。
プロジェクトのフォルダに、scraper.py
ファイルを作成します:
google-ai-overview-scraper/
├── venv/ # Your Python virtual environment
└── scraper.py # Your scraping script
scraper.pyは
今は空白のスクリプトですが、すぐにスクレイピングのロジックを含むようになります。
IDEのターミナルで、仮想環境を有効にする。LinuxまたはmacOSでは、このコマンドを実行する:
source ./venv/bin/activate
あるいは、Windowsの場合は、次のコマンドを実行する:
venv/Scripts/activate
素晴らしい!これでスクレイピングプロジェクトのためのクリーンなPython環境が整った。
ステップ2:Playwrightのインストール
Googleは動的なプラットフォームであり、最近のアップデートにより、ほとんどのページを完全に読み込むにはJavaScriptの実行が必要になった。また、有効なGoogle検索のURLを手作業で作成するのは厄介です。そのため、Google検索とやりとりする最善の方法は、ブラウザ上でユーザーの行動をシミュレートすることなのだ。
つまり、「AIの概要」セクションをスクレイピングするには、ブラウザ自動化ツールが必要なのだ。これによって、実際のブラウザーを起動し、ウェブページをロードし、ユーザーと同じようにプログラムで操作することができる。
Python用の最高のブラウザ自動化ツールのひとつにPlaywrightがある。起動したPython仮想環境に、playwright
pipパッケージでPlaywrightをインストールする:
pip install playwright
これでPlaywrightのインストールは完了だ:
python -m playwright install
このコマンドは、Playwrightがウェブブラウザを制御するために必要なブラウザ実行ファイルとその他のコンポーネントをダウンロードする。
このツールの使い方の詳細については、Playwrightを使ったウェブスクレイピングのガイドをお読みください。
素晴らしい!これで、GoogleからAI概要セクションのスクレイピングを開始するための準備がすべて整ったことになる。
ステップ3:Googleのホームページに移動する
scraper.py
ファイルを開き、Playwrightをインポートし、ヘッドレスモードでChromiumインスタンスを初期化します:
import asyncio
from playwright.async_api import async_playwright
async def run():
async with async_playwright() as p:
# Start a new Chromium instance
browser = await p.chromium.launch(headless=True) # Set to False while developing
context = await browser.new_context()
page = await context.new_page()
このスニペットでPlaywrightページの
インスタンスを作成し、ブラウザのタブをプログラムで制御できるようにします。headless=Trueを
設定すると、GUIなしでブラウザをバックグラウンドで実行します。開発中またはデバッグしたい場合は、headless=Falseを
設定して、スクリプトが実行中に何をしているかを観察してください。
async_playwrightは
非同期で実行されるので、スクリプトはPythonのasyncio
モジュールを使わなければならない。
免責事項:Google AI Overviewの新機能は通常、米国で最初に展開されることを覚えておいてください。Playwrightをウェブプロキシと統合することで、より正確な結果を得ることができます。具体的には、米国プロキシオプションをご覧ください。
これからは、あなたが米国内で活動していると仮定します。
ここで、Playwrightのgoto()
メソッドを使ってGoogleのホームページを開く:
await page.goto("https://google.com/")
スクリプトの最後には、ブラウザを閉じてリソースをクリーンアップすることを忘れないでください:
await browser.close()
すべてを合わせれば、こうなる:
import asyncio
from playwright.async_api import async_playwright
async def run():
async with async_playwright() as p:
# Start a new Chromium instance
browser = await p.chromium.launch(headless=True) # Set to False while developing
context = await browser.new_context()
page = await context.new_page()
# Navigate to Google
await page.goto("https://google.com/")
# scraping logic goes here ...
# Close the browser and free resources
await browser.close()
asyncio.run(run())
素晴らしい!これでグーグルのようなダイナミックなウェブサイトをスクレイピングする準備が整った。
ステップ#4: 検索フォームを送信する
ブラウザでGoogleのホームページにアクセスする。検索バーを右クリックし、”Inspect “を選択してブラウザの開発者ツールを開く:
GoogleのHTML構造では、動的に生成されるクラスや属性が使われることが多い。そのため、時間が経つとセレクタが壊れてしまい、スクレイピングの信頼性が低くなります。
その代わりに、安定したHTML属性をターゲットにします。例えば、検索テキストエリアには明確なaria-label
属性があります:
textarea[aria-label="Search"]
fill()
メソッドを使用して検索テキストエリアを選択し、Google 検索クエリで埋めます:
await page.fill("textarea[aria-label='Search']", search_query)
この例では、search_query
変数は以下のように定義されている:
search_query = "What is web scraping?"
質問形式のクエリを使用することは、GoogleにAI概要セクションの生成を促すのに最適な方法である。このセクションが検索結果ページに含まれるとは限らないので、これは重要である。特定のユースケースに合わせて、検索クエリを自由に調整してください。
次に、Enterキーを押すのをシミュレートして検索をトリガーする:
await page.keyboard.press("Enter")
スクリプトをヘッドフルモード(headless=False
)で実行し、page.close()
行にブレークポイントを設定すると、このようになります:
結果ページの上部にある「AIの概要」に注目してください。表示されない場合は、別の、より質問に近いクエリーでスクリプトを再実行してみてください。驚いた!
ステップ5:Google AI概要セクションをスクレイピングする
グーグルのAI概要機能がどのように機能するのか調べてみると、3つのシナリオが考えられることに気づくだろう:
- キャッシュされた応答:AI概要のスニペットはすでにキャッシュされており、即座に表示されます。
- リアルタイム生成:AIオーバービューは、Googleがクエリを処理する際に少し遅れて動的に生成される。
- AIの概要がない:GoogleはAIの概要セクションを全く表示しない。
このセクションでは、AIの概要がその場で生成されるシナリオ2に焦点を当てよう。これは最も厄介なケースであり、シナリオ1もカバーしている。
そのきっかけを作るには、新鮮な、あるいはあまり一般的でない質問形式のクエリを使ってみてください。例えば
上に示したように、AI概要セクションは数ミリ秒の処理の後に表示される。具体的には、title要素に “AI Overview “というテキストが含まれている場合のみ、準備ができたとみなすことができる。
したがって、AI概要のタイトルを含む要素を検査する:
タイトルは以下のCSSセレクタで選択できます:
div[jsname][role="heading"] strong
AI概要セクションが存在することを確認するには、この要素が表示され、正しいテキストが含まれるのを待つ:
await page.locator(
"div[jsname][role='heading'] strong", has_text="ai overview"
).first.wait_for(timeout=30000)
これは、”ai overview”(大文字・小文字を区別しない)テキストを含む要素がページ上に表示されるまで、最大30秒(30000ミリ秒)待つ。
AIの概要セクションが読み込まれたことを確認したら、スクレイピングの準備をしよう。たいていの場合、最初はコンテンツの一部が “Show more “ボタンの後ろに隠れている:
全レスポンスをスクレイピングするには、”Show more “ボタンがあるかどうかを確認し、それをクリックする:
try:
# Clicking the "Show more" button if it is present on the page
ai_overview_show_more_button = page.locator("div[aria-label='Show more AI Overview']").first
await ai_overview_show_more_button.click()
except PlaywrightTimeoutError:
print("'Show more' button not present")
PlaywrightTimeoutErrorを
インポートすることを忘れないでください。このエラーは、locator()
関数で指定された要素が見つからなかった場合に発生します:
from playwright.async_api import TimeoutError as PlaywrightTimeoutError
全セクションが表示されたら、HTMLの構造を調べ、どのように選択するかを決定する:
おわかりのように、このCSSセレクタを使ってAI概要のメイン・コンテンツを選択することができる:
div[jsname][data-rl] div
次のコードを使って要素を探し、そのHTMLを抽出する:
ai_overview_element = page.locator("div[jsname][data-rl] div").first
ai_overview_html = await ai_overview_element.evaluate("el => el.outerHTML")
なぜテキストだけでなくHTMLを抽出したのか不思議に思っている方は、このまま読み進めてください。
さあ、始めよう!Google AI Overviewセクションのスクレイピングに成功しました。
ステップ#6: Google AI概要のHTMLをMarkdownに変換する
ウェブスクレイピングに関して言えば、最も一般的な目的は要素からテキストを抽出することであり、完全なHTMLを抽出することではない。しかし、ほとんどの場合、Google AI Overviewセクション内のAIが生成したコンテンツはプレーンテキストではありません。
その代わり、箇条書き、リンク、小見出し、画像まで含めることができる。そのようなコンテンツをプレーンテキストとして扱うと、構造や文脈をすべて取り除いてしまうことになる。
そこで、より良いアプローチは、AI概要を生のHTMLとして扱い、それをAIアプリケーションに理想的なフォーマットであるMarkdownに変換することである。
HTMLをMarkdownに変換するには、起動した環境にMarkdownifyをインストールする:
pip install markdownify
それを輸入する:
from markdownify import markdownify as md
また、HTMLからMarkdownへのデータ変換にも利用できる:
ai_overview_markdown = md(ai_overview_html)
素晴らしい!あとはスクレイピングされたAI OverviewをMarkdownファイルにエクスポートするだけだ。
ステップ#7:スクレイピングしたデータをエクスポートする
Python Standard Libraryを使ってai_overview.mdという
出力ファイルを開き、変換されたMarkdownコンテンツをそこに書き込む:
with open("ai_overview.md", "w", encoding="utf-8") as f:
f.write(ai_overview_markdown)
これでGoogle AI Overviewスクレイピングの旅は終わりです!
ステップ8:すべてをまとめる
今現在、scraper.py
は以下を含んでいるはずです:
import asyncio
from playwright.async_api import async_playwright
from playwright.async_api import TimeoutError as PlaywrightTimeoutError
from markdownify import markdownify as md
async def run():
async with async_playwright() as p:
# Start a new Chromium instance
browser = await p.chromium.launch(headless=True) # Set to False while developing
context = await browser.new_context()
page = await context.new_page()
# Navigate to Google
await page.goto("https://google.com/")
# Fill out search form
search_query = "What is web scraping?" # Replace it with the search query of interest
await page.fill("textarea[aria-label='Search']", search_query)
await page.keyboard.press("Enter")
# Wait for the AI overview section to be ready
await page.locator(
"div\[jsname\][role='heading'] strong", has_text="ai overview"
).first.wait_for(timeout=30000)
try:
# Clicking the "Show more" button if it is present on the page
ai_overview_show_more_button = page.locator("div[aria-label='Show more AI Overview']").first
await ai_overview_show_more_button.click()
except PlaywrightTimeoutError:
print("'Show more' button not present")
# Extract the AI overview HTML
ai_overview_element = page.locator("div\[jsname\][data-rl] div").first
ai_overview_html = await ai_overview_element.evaluate("el => el.outerHTML")
# Convert the HTML to Markdown
ai_overview_markdown = md(ai_overview_html)
# Export the Markdown to a file
with open("ai_overview.md", "w", encoding="utf-8") as f:
f.write(ai_overview_markdown)
# Close the browser and free resources
await browser.close()
asyncio.run(run())
すごい!わずか50行足らずのコードで、グーグルのAI概要セクションをスクレイピングしたのだ。
上記のGoogle AI Overview scaperを起動する:
python script.py
すべてが期待通りに進めば、プロジェクトのフォルダにai_overview.md
ファイルが現れます。それを開くと、次のようなものが表示されるはずだ:
Web scraping is the process of using automated tools (called scrapers or bots) to extract content and data from websites. Unlike screen scraping, which captures only the visible pixels, web scraping delves deeper to retrieve the underlying HTML code and data stored in a website's database. This extracted data can then be used for various purposes like price comparison, market research, or data analysis.
Here's a more detailed explanation:
* **Automated Extraction:**
Web scraping involves using software to automatically visit websites, locate and extract specific data, and save it in a structured format like a CSV file or database.
* **HTML and Database Data:**
Scrapers don't just copy the visual content; they access the HTML code and data stored in the website's database to retrieve more comprehensive information.
* **Various Use Cases:**
Web scraping is employed for various purposes, including price comparison, market research, competitor analysis, lead generation, sentiment analysis, and more.
* **Not Just for Businesses:**
While businesses often use web scraping for data-driven decision-making, it's also valuable for individuals seeking price comparisons, market trends, or general data analysis.
* **Consider Ethical and Legal Implications:**
When web scraping, it's crucial to be aware of the website's terms of service and robots.txt file to ensure you are not violating their policies or engaging in illegal activities.
上記のMarkdownコンテンツをコピーし、StackEditのようなMarkdownビューアーに貼り付けます:
これこそが、構造化され、読みやすく、情報が豊富なGoogle AI Overviewのスニペットであり、生のHTMLからきれいなMarkdownに変換されたものである!
やった!ミッション完了。
グーグルAI概要のスクレイピングにおける課題
ヘッディング・モードでスクリプトを実行し続けると、ある時点でこのブロック・ページに遭遇する可能性が高い:
自動リクエストが多すぎたり、信頼性スコアの低いIPアドレスを使用したりすると、Googleはあなたの活動をボットとして検知し、reCAPTCHAでチャレンジします。
回避策として、Python で CAPTCHA をバイパスすることができます。これは単純な CAPTCHA には有効ですが、より高度な、あるいはreCAPTCHA v3 のような新しいバージョンの reCAPTCHA には失敗することがよくあります。
このような場合、プレミアムCAPTCHA解決サービスが必要になるでしょう。もう一つの方法は、Chromium以外のブラウザで動作するようにPlaywrightを設定することである。問題は、デフォルトでは、PlaywrightはChromium(またはその他のブラウザ)をGoogleのボット対策システムによって検出されるような方法でインストルメントすることである。
検出を回避するために、PlaywrightをAI Agent Browserと統合することができます。これはPlaywrightと互換性のあるクラウドブラウザで、エージェントワークフローにおけるウェブスクレイピングとデータ検索に特化している。
このアプローチの利点は、ほぼ無限のスケーラビリティとCAPTCHAチャレンジの大幅な削減です。CAPTCHAが表示された場合でも、Agent Browserは、CAPTCHAを解決する機能だけでなく、プロキシを統合し、Google AI Overviewのスクレイピングを任意の国や言語にジオロケートすることができます。
結論
このチュートリアルでは、Google AI Overviewとは何か、そしてそこからデータをスクレイピングする方法を学んだ。ご覧いただいたように、このデータを自動的に取得するシンプルなPythonスクリプトを作成するには、わずか数行のコードが必要です。
このソリューションは小規模なプロジェクトには有効ですが、大規模なスクレイピングには実用的ではありません。グーグルは業界で最も高度なアンチボット・テクノロジーを使用しているため、CAPTCHAやIP禁止になる可能性がある。さらに、このプロセスを多くのページに拡大すると、インフラコストが大幅に増加する。
AIワークフローにGoogleのSERPデータが必要な場合は、Bright DataのSERP APIなど、AIに対応したSERPデータを直接提供するAPIの利用を検討しよう。
ブライトデータの無料アカウントを作成し、AIデータ基盤のすべてのソリューションにアクセスしてください!