Web開発でスクレイピングが必要になることは多い。Puppeteerを使えばブラウザ操作を自動化できる。検索結果を取得したくてGoogleに向けたらbanされた。しかし、代替手段はいくらでもある。そこで今回は、banされた経緯と、DuckDuckGoやBingで代替ツールを作った話を共有する。
PuppeteerでGoogle検索を自動化しようとした理由
あるプロジェクトで検索結果の定期モニタリングが必要になった。自社サイトの検索順位を毎日チェックしたかったのだ。手動で検索するのは非効率だ。そこで、PuppeteerでChromeを自動操作し、検索結果を取得することにした。つまり、ヘッドレスブラウザでGoogleにアクセスし、結果を解析する仕組みだ。
Puppeteerの導入自体は簡単だ。npmでインストールし、数行のコードでブラウザを起動できる。検索キーワードを入力し、結果ページのDOMを解析する。しかし、この方法には大きな落とし穴があった。
banされた経緯
最初の数回は問題なく動いた。しかし、10回ほどリクエストを送った時点でCAPTCHAが表示された。さらに続けるとIPアドレスごとブロックされた。つまり、Googleはヘッドレスブラウザからのアクセスを検知して遮断したのだ。
なぜ検知されるのか。Googleはいくつかの方法でボットを見分けている。具体的には、ブラウザのフィンガープリント、アクセス頻度、マウスの動きの有無などだ。Puppeteerのデフォルト設定ではnavigator.webdriverがtrueになる。そのため、ボットだと一発でバレる。
Puppeteer-stealthというプラグインを使えば多少は回避できる。しかし、2025年時点ではGoogleの検知が非常に高度になっている。実際、User-Agentを偽装してもCookieの挙動やJavaScriptの実行パターンで見抜かれる。したがって、Googleのスクレイピングは技術的にもリスクが高い。加えて、Googleの利用規約はスクレイピングを明確に禁止している。
DuckDuckGoで代替ツールを作る
Google以外にも検索エンジンはある。まず試したのがDuckDuckGoだ。プライバシー重視の検索エンジンで、スクレイピングに対して比較的寛容だ。APIは公式にはないが、HTMLをパースすれば結果を取得できる。
具体的には、PuppeteerでDuckDuckGoにアクセスし、検索結果を取得した。Googleほどのスクレイピング対策がないため、安定して動作する。しかし、検索結果の品質はGoogleに劣る場面がある。特に、日本語の検索では差が顕著だ。とはいえ、順位チェック程度の用途なら十分だ。
また、MCPサーバー経由でDuckDuckGoを使う方法もある。これはAIエージェントからウェブ検索を行う際の標準的な手法になりつつある。さらに、検索結果をJSON形式で受け取れるので解析が楽だ。
Bing APIという選択肢
もう一つの有力な選択肢がBing APIだ。Microsoftが公式に提供する検索APIで、構造化されたJSONで結果を返してくれる。そのため、HTMLのパースが不要で安定性が高い。ドキュメントも充実している。
ただし、注意点がある。BingはSearch APIを2025年8月に廃止する予定だった。実際、移行先のサービスは別途確認が必要だ。しかし、代替としてBrave Search APIも台頭している。こちらはプライバシー重視で、透明な料金プランが特徴だ。なお、無料枠もあるので試しやすい。
2025年のスクレイピング事情
2025年のベストプラクティスはAPI優先のアプローチだ。スクレイピングは法的リスクもあるし、サイト側の変更で簡単に壊れる。したがって、公式APIがあるならそちらを使うべきだ。具体的には、SerpAPIやScrapingAntなどのSERP取得サービスもある。コストはかかるが安定性が段違いだ。
また、HTTPリクエストベースのアプローチも検討に値する。Puppeteerのようにブラウザを丸ごと起動するのは重い。しかし、HTTPリクエストならリソース消費が少なく、検知されにくい。さらに、Puppeteerよりも高速に動作する。
それでもPuppeteerを使いたい場面はある。たとえば、JavaScriptで動的に生成されるページの取得だ。しかし、Google検索には使うべきではない。このように、スクレイピングはツールとターゲットの組み合わせが大事だ。banされた経験は痛かったが、代替手段を探す良いきっかけになった。検索自動化を考えている人は、最初からAPIベースで設計することをすすめる。