0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DuckDuckGoのSERPデータをスクレイピングする方法:4つの効果的なアプローチ

Posted at

Medium image
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つのアプローチの概要

Medium image

アプローチ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と同じ信頼性

どのアプローチを選ぶべきか?

Medium image

スクレイピング時にブロックを避けるためのヒント

DuckDuckGoは同じIPからの繰り返しリクエストをブロックする可能性があります。これを減らすために:

  • 現実的なUser-Agent文字列を使用する
  • リクエスト間に遅延を追加する
  • ローテーティングプロキシを使用する
  • 公式のスクレイピングAPIを使用する
  • 非常に高いリクエストレートを避ける

最後の考え

DuckDuckGoのスクレイピングは、選択する方法によって簡単にも複雑にもなります。少量のデータを収集したいだけなら、カスタムスクレイパーやDDGSライブラリで十分なことが多いです。しかし、大規模で信頼性が高く、完全に自動化されたスクレイピングが必要な場合、Bright Data SERP APIやMCPサーバー統合のようなソリューションは、時間を節約し、問題を防ぐことができます。他のオプションが必要な場合は、私の最高のSERP APIのリストをチェックしてください。
各アプローチには強みがあるため、自分のスキルレベルとプロジェクトのニーズに合ったものを選んでください。正しく使用すれば、DuckDuckGoは研究、アプリケーション、分析のための検索データの貴重なリソースとなります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?