自前のツールにWeb検索機能を組み込みたくて、PuppeteerでHeadless Chromeを操作し、Google検索を自動化しようとした。結果から言うと、あっさりbanされた。

Google検索の自動化は甘くなかった

Puppeteerでページを開き、検索ボックスにクエリを入力して結果を取得する。やること自体はシンプルだった。最初の数回は問題なく動く。検索結果のHTMLをパースして、タイトルとURLとスニペットを抽出できる。

ところが、10回ほど検索を繰り返したあたりでCAPTCHAが表示されるようになった。「私はロボットではありません」というやつだ。Headless Chromeでは当然クリックできない。

しばらく時間を置いてから再試行しても状況は変わらなかった。IPアドレス単位でブロックされているらしく、一度弾かれると数時間は復旧しない。User-Agentを変えたり、リクエスト間隔を空けたりしても効果はなかった。Googleのbot検出はかなり厳しい。

DuckDuckGoのHTML版に切り替える

代替の検索エンジンとして最初に試したのがDuckDuckGoだった。DuckDuckGoにはJavaScriptを使わないHTML版(https://html.duckduckgo.com/html/)がある。

このHTML版はbot検出がかなり緩い。同じIPから連続でリクエストを送っても、今のところブロックされたことがない。レスポンスもプレーンなHTMLなので、パースも簡単だった。

const response = await page.goto(
  `https://html.duckduckgo.com/html/?q=${encodeURIComponent(query)}`
);
const results = await page.$$eval('.result__a', els =>
  els.map(el => ({
    title: el.textContent,
    url: el.href
  }))
);

検索精度はGoogleに比べると若干落ちるが、トレンドの把握や一般的な情報収集には十分使える。

Bingで関連キーワードを補完する

Bingも併用することにした。Bingの検索結果ページには「関連する検索」セクションがあり、ここから関連キーワードを取得できる。SEOのキーワード調査に役立つ情報だ。

DuckDuckGoで本検索、Bingで関連キーワード取得、という組み合わせにしたところ、Google検索の代替としてそこそこ実用的なものになった。

サジェストAPIは別格に軽い

検索の自動化とは別に、キーワードのサジェスト(入力補完候補)を取得する方法も調べた。GoogleとBingにはサジェスト用のAPIエンドポイントが公開されている。

// GoogleサジェストAPI(ブラウザ不要)
const url = `https://suggestqueries.google.com/complete/search?client=firefox&q=${encodeURIComponent(query)}`;
const res = await fetch(url);
const data = await res.json();
// data[1] にサジェスト候補の配列が入る

これはブラウザを起動する必要がない。HTTPリクエスト1回で完結する。Chromiumの起動に20〜30秒かかる環境では、この差は大きかった。キーワード調査だけならサジェストAPIで十分だと気づいた。

ツールキットとしてまとめた

これらの検索手段をひとつのCLIツールにまとめた。コマンドごとに用途を分けている。

# DuckDuckGo検索
node smart_search.js search "AI エージェント 自動化"

# Bingニュース検索
node smart_search.js news "ChatGPT 最新"

# サジェスト取得(ブラウザ不要、高速)
node smart_search.js suggest "ブログ 収益化"

# JSレンダリング済みページのテキスト取得
node smart_search.js fetch "https://example.com"

# Googleトレンド急上昇
node smart_search.js gtrends

searchやnews、fetchはPuppeteerでChromeを起動するため、初回は20〜30秒かかる。一方、suggestはAPI直接なので一瞬で返ってくる。用途に応じて使い分けている。

Google検索に依存しない設計のメリット

結果的に、Google検索に依存しない構成になった。DuckDuckGoとBingの組み合わせは、Googleほどの検索精度はないものの、自動化ツールとしての安定性は高い。bot検出を気にしながらリクエスト間隔を調整する、といったストレスがない。

Web検索の自動化を考えている人は、最初からGoogle以外の選択肢を検討しておくのがいいかもしれない。あとからbanされて設計をやり直すのは、なかなか面倒だった。

関連記事


参考リンク

関連記事