
DuckDuckGoのSERPデータをスクレイピングする方法
DuckDuckGoのSERPデータをスクレイピングする方法:4つの効果的なアプローチ
このガイドでは、DuckDuckGoのSERPデータをスクレイピングするための4つの実用的な方法を紹介します。専門家である必要はありません — 各方法は初心者に優しく、あなたのスキルや目標に合ったものを選ぶことができます。シンプルなスクリプト、既製のツール、またはスケーラブルなソリューションを求めている場合でも、あなたのプロジェクトに合ったアプローチが見つかるでしょう。
注意:私はどのプロバイダーとも提携していません。このチュートリアルでは、最も馴染みのあるBright Dataを使用しています。他の信頼できるプロバイダーを 私のリスト****から自由に選んでください!
なぜDuckDuckGoをスクレイピングするのか?
DuckDuckGoはプライバシーを重視する多くの人々にとって重要な検索プラットフォームとなっています。このため、より多くのアナリストや開発者がその結果を研究し、ランキングを比較したり、トレンドを監視したり、データセットを構築したり、AIワークフローをサポートしたりすることを望んでいます。
DuckDuckGoをスクレイピングすることで、以下のことが可能になります:
- キーワードパフォーマンスの分析
- 機械学習用のデータセットの構築
- 検索トレンドの変化の追跡
- 検索エンジンの比較
- SEO戦略のテスト
- 自動化されたリサーチツールの作成
DuckDuckGoのSERPバージョン
DuckDuckGoは、検索結果ページの2つの異なるバージョンを提供しています。これらのバージョンを理解することで、適切なスクレイピングアプローチを選ぶことができます。
1. ダイナミックバージョン
- 大多数のユーザーが見る標準バージョン
- JavaScriptを使用してコンテンツを読み込み
- 「More Results」などの機能を使用
- JavaScriptレンダリングが必要
- URL形式:
https://duckduckgo.com/?q=<YOUR_QUERY>
2. スタティックバージョン
- JavaScriptなし
- シンプルなHTMLを読み込み
- 「Next」を使用した標準的なページネーション
- URL形式:
https://html.duckduckgo.com/html/?q=<YOUR_QUERY>
このバージョンは軽量なスクレイパーに最適です。迅速なHTTPリクエストでページを取得できます。
4つのアプローチの概要
アプローチ1:自分自身のDuckDuckGoスクレイパーを構築する
この方法では完全なコントロールが得られます。DuckDuckGoのスタティックSERPバージョンからデータを取得し、解析するためのPythonスクリプトを自分で書きます。
データジャーナルのストーリーをあなたの受信箱に
Mediumに無料で参加して、このライターからの更新を受け取りましょう。
このアプローチは以下に最適です:
- スクレイピングの仕組みを学ぶ
- 小規模な個人プロジェクト
- カスタム抽出ロジック
ステップ1:必要なライブラリをインストール
pip install requests beautifulsoup4
-
`requests`はHTTPリクエストを送信します -
`BeautifulSoup`はHTMLからデータを抽出します
ステップ2:スタティックSERPページをリクエスト
import requests
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
}
url = "https://html.duckduckgo.com/html/"
params = {"q": "agentic rag"}
response = requests.get(url, headers=headers, params=params)
html = response.text
ステップ3:HTMLを解析
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, "html.parser")
results = soup.select("#links .result")
ステップ4:有用な情報を抽出
各検索結果には以下が含まれます:
- タイトル
- URL
- 表示リンク
- スニペット
scraped = []
for item in results:
title_tag = item.select_one(".result__a")
if not title_tag:
continue
title = title_tag.get_text(strip=True)
href = title_tag.get("href", "")
link = href if href.startswith("http") else f"https:{href}"
display_tag = item.select_one(".result__url")
display = display_tag.get_text(strip=True) if display_tag else ""
snippet_tag = item.select_one(".result__snippet")
snippet = snippet_tag.get_text(strip=True) if snippet_tag else ""
scraped.append({
"title": title,
"url": link,
"display_url": display,
"snippet": snippet
})
ステップ5:CSVに保存
import csv
if scraped:
with open("results.csv", "w", newline="", encoding="utf-8") as f:
writer = csv.DictWriter(f, fieldnames=["title", "url", "display_url", "snippet"])
writer.writeheader()
writer.writerows(scraped)
print(f"Saved {len(scraped)} results to results.csv")
このアプローチを使用するタイミング
✅ 完全なカスタマイズを望む
✅ コーディングを楽しむ
✅ 大規模なスクレイピングは必要ない
避けるべきタイミング
❌ 数千件の検索を期待している
❌ JavaScriptを使用した動的バージョンが欲しい
❌ 手動でブロックを処理したくない
アプローチ 2: DDGSライブラリを使用する
DDGSは、DuckDuckGoのスクレイピングを簡素化するために構築されたPythonライブラリおよびCLIツールです。独自のパーサーを作成したくない場合、最も簡単な無料の方法です。
インストール
pip install -U ddgs
CLIを使用して検索結果をスクレイピングする
ddgs text -q "agentic rag" -b duckduckgo -o output.csv
これにより、タイトル、URL、スニペットを含むCSVファイルが作成されます。
DDGSの利点
✅ コードを書く必要がない
✅ CLIまたはPythonで動作する
✅ 小規模な使用に最適
欠点
❌ まだブロックされる可能性がある
❌ 柔軟性が制限される
❌ 大規模な作業には不向き
DDGSでプロキシを使用する(オプション)
ブロックの可能性を減らしたい場合:
ddgs text -q "agentic rag" -b duckduckgo \
-o output.csv \
-pr USER:PASS@brd.superproxy.io:33335
これにより、すべてのトラフィックが回転プロキシを通過します。
アプローチ 3: Bright DataのSERP APIを使用する
大規模または高信頼性のスクレイピングには、APIベースのアプローチが最も効果的です。Bright DataのSERP APIは以下を処理します:
- JavaScriptレンダリング
- IPローテーション
- ブラウザフィンガープリンティング
- ブロックとCAPTCHA
URLをリクエストすると、APIは完全にレンダリングされたHTMLまたは構造化されたJSONを返します。
このアプローチの強力さ
以下をスクレイピングできます:
- 動的なDuckDuckGoのSERP
- AI生成の「検索アシスト」セクション
- 無限スクロールまたは「さらに結果」コンテンツ
- 大量のクエリ
すべてプロキシ、ブラウザ、またはブロックを扱うことなく実行できます。
Pythonでのリクエストの例
import requests
api_key = "<YOUR_API_KEY>"
zone = "<YOUR_SERP_ZONE>"
target = "https://duckduckgo.com/?q=agentic+rag"
response = requests.post(
"https://api.brightdata.com/request",
headers={
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
},
json={
"zone": zone,
"url": target,
"format": "raw"
}
)
if response.status_code == 200:
html = response.text
print(html)
else:
print(f"Error: {response.status_code}")
このアプローチを使用すべき人
- 企業
- SEOエージェンシー
- AI開発者
- 大規模データ収集者
利点
✅ 信頼性が高い
✅ 大量処理が可能
✅ ブロックなし
✅ すべてのDuckDuckGoバージョンで動作
欠点
❌ 有料サービス
アプローチ 4: AIエージェントのためにMCPサーバーを使用してDuckDuckGoをスクレイピングする
AIアシスタント、自律エージェント、または高度なワークフローで作業している場合、このアプローチはあなたのために設計されています。Bright Dataは、search_engineというツールを公開するMCPサーバーを提供しています。
これにより、AIツールはMCPサーバーに「要求」することでSERPデータを取得できます。
MCPのユースケース
- AIコーディングアシスタント
- AI研究エージェント
- 自動化されたワークフロー
- マルチエージェントシステム
- インターネットアクセスを持つチャットベースのツール
仕組み
MCPサーバーをインストールし、APIキーで構成します(ここではBright Dataを使用していますが、好きなものを選んでください):
{
"mcpServers": {
"Bright Data Web MCP": {
"command": "npx",
"args": ["-y", "@brightdata/mcp"],
"env": {
"API_TOKEN": "<YOUR_BRIGHT_DATA_API_KEY>"
}
}
}
}
その後、あなたのAI環境(例えば、Claude Code)はMCPインターフェースを通じてDuckDuckGoのSERPデータにアクセスできます。
利点
✅ スクレイピングコードは不要
✅ AI統合に最適
✅ 無料プランあり
✅ SERP APIと同じ信頼性
どのアプローチを選ぶべきか?
スクレイピング時にブロックを避けるためのヒント
DuckDuckGoは同じIPからの繰り返しリクエストをブロックする可能性があります。これを減らすために:
- 現実的なUser-Agent文字列を使用する
- リクエスト間に遅延を追加する
- ローテーティングプロキシを使用する
- 公式のスクレイピングAPIを使用する
- 非常に高いリクエストレートを避ける
最後の考え
DuckDuckGoのスクレイピングは、選択する方法によって簡単にも複雑にもなります。少量のデータを収集したいだけなら、カスタムスクレイパーやDDGSライブラリで十分なことが多いです。しかし、大規模で信頼性が高く、完全に自動化されたスクレイピングが必要な場合、Bright Data SERP APIやMCPサーバー統合のようなソリューションは、時間を節約し、問題を防ぐことができます。他のオプションが必要な場合は、私の最高のSERP APIのリストをチェックしてください。
各アプローチには強みがあるため、自分のスキルレベルとプロジェクトのニーズに合ったものを選んでください。正しく使用すれば、DuckDuckGoは研究、アプリケーション、分析のための検索データの貴重なリソースとなります。

