このリポジトリでは、DuckDuckGoの検索エンジン結果ページ(SERPs)からデータを抽出するための2つのソリューションを提供します。
- 無料 DuckDuckGo Scraper: 小規模でDuckDuckGo検索結果をスクレイピングするためのツール
- エンタープライズグレード DuckDuckGo SERP API: 大量・リアルタイムのデータ抽出に対応した、スケーラブルで本番運用可能なソリューション(Bright Data's SERP Scraper API の一部)
- Free DuckDuckGo SERP Scraper
- DuckDuckGo SERP API
- Implementation Methods
- DuckDuckGo Search Query Parameters
- Practical Example
- Support & Resources
Free DuckDuckGo SERP Scraperは、小規模に検索結果データを収集するためのシンプルな方法を提供します。プロキシの管理や大量処理のオーバーヘッドなしで、限られたデータが必要な場合に最適です。
- Python 3.9+ – Download Python
- Required Packages:
selenium(ブラウザ自動化用)webdriver-manager(ブラウザドライバー管理用)beautifulsoup4(HTML解析用)
以下でパッケージをインストールします:
pip install selenium webdriver-manager beautifulsoup4Webスクレイピングが初めてですか?
まずは Beginner’s Guide to Web Scraping with Python で学習を始めてください。次に、Using Selenium for Web Scraping チュートリアルでレベルアップし、すでにSeleniumに慣れている場合は、高度な SeleniumBase guide でさらにスキルを伸ばしてください。
-
duckduckgo-serp-scraper.py ファイルを開きます。
-
必要に応じて検索語をカスタマイズします:
SEARCH_TERMS = [ "ergonomic office chair", "coffee maker", ]
-
スクリプトを実行してスクレイピングを開始します。
以下はスクレイパーの出力プレビューです:
無料スクレイパーは基本的なタスクには便利ですが、以下の重要な制限がある点に注意してください:
- 頻繁に使用するとIPアドレスをブロックされるリスクが高い
- リクエスト量の対応能力が限定的
- CAPTCHAの中断が頻繁に発生
- 本番環境には不向き
スケーラブルで安定したソリューションが必要な場合は、以下で説明するBright Dataの専用APIをご検討ください 👇
DuckDuckGo SERP APIは、Bright Dataの包括的な SERP Scraper API スイートの一部です。業界をリードする DuckDuckGo proxy infrastructure を活用し、単一のAPI呼び出しでリアルタイムのDuckDuckGo検索結果を提供します。
- グローバルな精度: 世界中の特定ロケーション向けに最適化された結果を取得できます。
- Pay-Per-Success: 成功したリクエストに対してのみ料金が発生します。
- リアルタイムデータ: 数秒で最新の検索結果にアクセスできます。
- 無制限のスケーラビリティ: 大量スクレイピングを容易に処理できます。
- コスト効率: 高価なインフラは不要です。
- 信頼性の高いパフォーマンス: 高度なアンチブロッキング技術により一貫した結果を確保します。
- 24/7 エキスパートサポート: 必要なときにいつでも支援を受けられます。
📌 Try Before You Buy: SERP API Live Demo でソリューションを体験できます。
- Bright Dataアカウントを作成 します(新規ユーザーには$5クレジットが付与されます)。
- API key を生成します。
- step-by-step configuration guide に従ってSERP APIを統合します。
以下の2つの方法のいずれかで、DuckDuckGo SERP APIをワークフローに統合できます:
Bright DataのAPIエンドポイントへ直接リクエストします。
curl https://api.brightdata.com/request \
-H "Content-Type: application/json" \
-H "Authorization: Bearer API_TOKEN" \
-d '{
"zone": "ZONE_NAME",
"url": "https://duckduckgo.com/?q=budget+laptops+under+500+gbp&kl=uk-en&kad=en-gb&df=w",
"format": "raw"
}'import requests
url = "https://api.brightdata.com/request"
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer API_TOKEN"
}
payload = {
"zone": "ZONE_NAME",
"url": "https://duckduckgo.com/?q=budget+laptops+under+500+gbp&kl=uk-en&kad=en-gb&df=w",
"format": "raw",
}
response = requests.post(url, headers=headers, json=payload)
with open("duckduckgo-scraper-api-result.html", "w", encoding="utf-8") as file:
file.write(response.text)
print("Response saved!")検索結果へ直接アクセスするために、プロキシルーティングを使用します。
curl -i \
--proxy brd.superproxy.io:33335 \
--proxy-user brd-customer-<CUSTOMER_ID>-zone-<ZONE_NAME>:<ZONE_PASSWORD> \
-k \
"https://duckduckgo.com/?q=budget+laptops+under+500+gbp&kl=uk-en&kad=en-gb&df=w"import requests
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
host = "brd.superproxy.io"
port = 33335
username = "brd-customer-<CUSTOMER_ID>-zone-<ZONE_NAME>"
password = "<ZONE_PASSWORD>"
proxy_url = f"http://{username}:{password}@{host}:{port}"
proxies = {
"http": proxy_url,
"https": proxy_url
}
url = "https://duckduckgo.com/?q=budget+laptops+under+500+gbp&kl=uk-en&kad=en-gb&df=w"
response = requests.get(url, proxies=proxies, verify=False)
with open("duckduckgo-scraper-api-result.html", "w", encoding="utf-8") as file:
file.write(response.text)
print("Response saved!")Note: ネイティブプロキシ方式を本番運用で使用する場合は、Bright DataのSSL証明書をインストールすることを推奨します。詳細は SSL Certificate Guide を参照してください。
👉 HTML出力の完全なプレビューについては、complete result をご覧ください。
さまざまなクエリパラメータを使用して検索結果を微調整できます。
検索結果の国と言語を指定します。
Example:
curl --proxy brd.superproxy.io:33335 \
--proxy-user brd-customer-<id>-zone-<zone>:<password> \
"https://duckduckgo.com/?q=best+coffee+brands&kl=it-it"これはイタリア向けに最適化された検索結果を返します。
DuckDuckGoインターフェースの言語を制御します。
Example:
https://duckduckgo.com/?q=photo+editing+tools&kad=deこれにより、検索コンテンツは英語のまま、インターフェースがドイツ語で表示されます。
成人向けコンテンツに対するフィルタリングを調整します。
1– 厳格なSafe Search-1– 中程度-2– オフ
Example:
https://duckduckgo.com/?q=swimsuit&kp=1"swimsuit” に対してファミリー向けの結果のみを返します。
検索結果を特定の期間に限定します。
d– 過去1日w– 過去1週間m– 過去1か月y– 過去1年- Custom range: 例:
2025-03-01..2025-03-10
Example:
https://duckduckgo.com/?q=iphone+15+review&df=w直近(過去1週間)のレビューのみを表示します。
さまざまなデバイスタイプからの検索をシミュレートします。
0– デスクトップ(デフォルト)1– ランダムなモバイルデバイスiosoriphone– iPhoneipadorios_tablet– iPadandroid– Android phoneandroid_tablet– Android tablet
Example:
https://duckduckgo.com/?q=top+travel+apps&brd_mobile=iosこれはiPhoneユーザーをシミュレートします。App Storeリンク、モバイル向けコンテンツ、またはAMPページが表示される場合があります。
リクエストに使用するブラウザのuser-agentを指定します。
- Default(ランダムなブラウザ)
chrome– Google Chromesafari– Safarifirefox– Mozilla Firefox (brd_mobile=1とは互換性がありません)
Example:
https://duckduckgo.com/?q=best+vpn+services&brd_browser=safariこれはSafariブラウザをシミュレートし、そのプラットフォームでコンテンツがどのように表示・ランキングされるかの把握に役立ちます。
英国で "budget laptops under £500" の競合の価格ページを監視しており、モバイルユーザーをターゲットにしています。
目的は以下のとおりです:
- 英国ベースのモバイルユーザーをシミュレートする
- ローカライズされた英語の結果を取得する(英国の小売業者、通貨)
- モバイル向けChrome user agentを使用する(AMPページなどモバイル固有の結果を取得するため)
- 最近の製品まとめ記事やセールに注目する
これらの要件を1つのcURLコマンドにまとめます:
curl --proxy brd.superproxy.io:33335 \
--proxy-user brd-customer-<CUSTOMER_ID>-zone-<ZONE_NAME>:<ZONE_PASSWORD> \
"https://duckduckgo.com/?\
q=budget+laptops+under+500+gbp&\
kl=uk-en&\
kad=en-gb&\
df=w&\
brd_mobile=android&\
brd_browser=chrome"🎯 これにより、モバイルファースト、ローカライズ、かつ最新のコンテンツを取得できます。
- Documentation: SERP API Documentation
- Related APIs:
- Use Cases:
- Additional Reading: Best SERP APIs
- Contact Support: support@brightdata.com



