nikkie-ftnextの日記

イベントレポートや読書メモを発信

SerpApiでGoogle検索する(Hugging Faceのdeep research再現チャレンジの実装を読む中で知りました)

はじめに

あべきゃわもち nikkieです。

すごいAPIを知ってしまいましたっ!

目次

知ったきっかけ

Hugging Faceのdeep research再現24時間チャレンジ1の実装からです。
https://github.com/huggingface/smolagents/blob/gaia-submission-r1/examples/open_deep_research/scripts/text_web_browser.py

関連箇所を抜粋

from serpapi import GoogleSearch

search = GoogleSearch(params)

SerpApi

Scrape Google and other search engines from our fast, easy, and complete API.

検索APIファサードといった印象。
Google利用規約に照らして、検索結果をスクレイピングしてよかったんだっけ?という論点は別途あると思います)

公式のSDKがこちら
https://pypi.org/project/serpapi/

smolagentsのようにSerpApiを介してGoogle検索してみます

SerpApiでGoogle検索

アカウントを作りました。
月100検索まで無料枠(Free)で使えます。
https://serpapi.com/pricing
APIキーを発行して、環境変数SERP_API_KEYに指定します。

コードはこちらをベースにしました。
https://github.com/serpapi/serpapi-python/tree/v0.1.5?tab=readme-ov-file#search-google
クライアントのsearch()メソッド、engineの指定を変えるだけで叩き分けられるみたいです。

api_key_from_environment()というSERP_API_KEYを読む関数があったので使いました。
OpenAIなどのクライアントと違って、特定の環境変数を自動で読むわけではないようです(プルリクチャンス)

Google検索と同じという理解で、スペースで区切って検索しています。

SerpApiのドキュメントより

画像が分かりやすかったのですが、Google検索でWebページが並んでいる部分はorganic_resultsと呼ぶようです2

動作環境

  • uv 0.5.17
  • Python 3.12.5
  • serpapi 0.1.5
% uv run -q --python 3.12 script.py
エミリー スチュアート - ミリオンライブ
https://millionlive-theaterdays.idolmaster-official.jp/idol/emily/
大和撫子になりたい!!雅で可憐な英国女子. えみりー すちゅあーと. エミリースチュアート. CV.郁原ゆう. VOICE1 VOICE2 VOICE3. エミリー スチュアートカード. PROFILE.

エミリー・スチュアート - ピクシブ百科事典
https://dic.pixiv.net/a/%E3%82%A8%E3%83%9F%E3%83%AA%E3%83%BC%E3%83%BB%E3%82%B9%E3%83%81%E3%83%A5%E3%82%A2%E3%83%BC%E3%83%88
エミリー スチュアートとは、『アイドルマスターミリオンライブ!』に登場する日本文化をこよなく愛する大和撫子(あいどる)。 「大好きな日本で大和撫子を目指せる ...

(省略)

smolagentsの実装では、検索して得たURLを自前のテキストベースブラウザで開いていました3
(検索〜得たURLの中の確認をCodeAgentにやらせています。ソースを読んでいる途中です)

裏話:古いSDK google-search-results

冒頭で紹介したsmolagentsのコードとは違いましたよね?
これはsmolagentsが古いSDK https://pypi.org/project/google-search-results/ を使っているためと思われます。

https://github.com/serpapi/serpapi-python/issues/14#issuecomment-1943842298

I believe you're looking for our older google-search-results library.
Both it and this newer serpapi library have the same module name for imports, but different interfaces, so they're very easily confused.

新旧どちらもimportするモジュール名はserpapiなんですね

終わりに

Hugging Faceのdeep research再現24時間チャレンジの実装から知ったSerpApiを試しました。

Google検索をAPIから使えると、得たURLからHTMLを取得して(=スクレイピング)、文字列処理みたいな感じで自動化が見えてきますね。
そこにCodeAgentが加わると、精度高くタスク(例:質問応答)をこなすための情報を見つけられるってことなのかな?

Hugging Faceのdeep research再現チャレンジ再現シリーズはもう少し続くと思います


  1. Hugging Faceによるエージェントライブラリ smolagents をGemini 2.0 Flashで動かす - nikkie-ftnextの日記で取り上げた
  2. Organic Resultsのページ https://serpapi.com/organic-results
  3. organic_resultsを含まない場合もあるようで、SerpApiの返り値をしっかりめに処理している印象です