DuckDuckGoのAPIがとても便利だった
Jul 28, 2024 16:15 · 4697 words · 10 minute read
DuckDcukGoのAPIを試しました。色んな部分で活用できそうだったので、ブログに残します。
目次
- DuckDcukGo APIでできること、活用例
- DuckDcukGoの検索精度と使い勝手は想像以上
- テキスト検索のサンプルコード
- テキスト検索以外のAPI
- プライバシーへの配慮もDuckDuckGoの強み
- 最後に
DuckDcukGo APIでできること、活用例
DuckDuckGoの機能をAPI経由で使えます。 APIで提供している機能は下記の通り。 通常のテキスト検索だけでなく、ニュースの検索や翻訳などもできます。
ddgs --help
Usage: ddgs [OPTIONS] COMMAND1 [ARGS]... [COMMAND2 [ARGS]...]...
dukduckgo_search CLI tool
Options:
--help Show this message and exit.
Commands:
answers CLI function to perform a answers search using DuckDuckGo...
chat CLI function to perform an interactive AI chat using...
images CLI function to perform a images search using DuckDuckGo API.
maps CLI function to perform a maps search using DuckDuckGo API.
news CLI function to perform a news search using DuckDuckGo API.
suggestions CLI function to perform a suggestions search using...
text CLI function to perform a text search using DuckDuckGo API.
translate CLI function to perform translate using DuckDuckGo API.
version
videos CLI function to perform a videos search using DuckDuckGo API.
APIの活用例
API全体をざっと使ってみた結果、下記のような場面で使えそうだなと感じました。
- 定期的にキーワードを検索する
- 自社に関連するキーワードを定期検索
- 特定のイベントに関するキーワードを定期検索
- 自分が開発しているツールに翻訳機能を追加する
- 自分が開発しているツールにチャット機能を追加する
テキストの検索や翻訳API、GPT-3.5やClaude3相当のChatAIを全て無料で使えるのはかなり魅力的だと思います。
DuckDcukGoの検索精度と使い勝手は想像以上
無料で使えたとしても検索精度が悪くては使う気になりません。 1週間程メインの検索エンジンとしてDuckDcukGoを使ってみましたが、検索結果は想像以上でした。
検索結果の情報量では王者のGoogleには敵いませんが、それでも使っていて困ることはほぼありませんでした。 APIの結果から推測するに、おそらく独自のクローリングデータにプラスしてBing Search APIを使っているようです。 Web UIがシンプルなこともあり、Bingよりも使いやすい印象でした。
検索結果が不十分な場合でも、「!g {検索キーワード}」と検索するとGoogle検索にすぐに移動できるので、そこまで不便を感じません。
テキスト検索のサンプルコード
テキスト検索をする場合のサンプルコードです。 ダブルクォートで検索文字列を囲うと、検索文字列に完全に一致する結果だけ取得できます。
import json
from duckduckgo_search import DDGS
with DDGS() as ddgs:
results = list(ddgs.text(
keywords='"blog.kapiecii.com"',
region='jp-jp',
safesearch='Off',
timelimit=None,
max_results=10,
))
for line in results:
print(json.dumps(line, ensure_ascii=False, indent=2))
テキスト検索以外のAPI
テキスト検索以外も試しました。CLIツールの実行結果を残しておきます。
answers
ddgs answers --help
Usage: ddgs answers [OPTIONS]
CLI function to perform a answers search using DuckDuckGo API.
Options:
-k, --keywords TEXT answers search, keywords for query [required]
-o, --output TEXT csv, json (save the results to a csv or json file)
-p, --proxy TEXT the proxy to send requests, example:
socks5://127.0.0.1:9150
--help Show this message and exit.
実行結果
-o でjsonやcsvを指定した場合はファイルに結果が出力され、CLIには結果は出力されません。
ddgs answers -k spacex
1. ====================================================================
icon None
text Space Exploration Technologies Corporation, commonly referred to as SpaceX, is
an American spacecraft manufacturer, launch service provider and
satellite communications company headquartered in Hawthorne,
California. The company was founded in 2002 by Elon Musk with the
goal of reducing space transportation costs and ultimately
developing a sustainable colony on Mars. The company currently
produces and operates the Falcon 9 and Falcon Heavy rockets along
with the Dragon, and Starship as a hybrid between a rocket and a
spacecraft. The company offers internet service via its Starlink
subsidiary, which became the largest-ever satellite constellation
in January 2020 and, as of April 2024, comprised more than 6,000
small satellites in orbit. Meanwhile, the company is developing
Starship, a human-rated, fully-reusable, super heavy-lift launch
system for interplanetary and orbital spaceflight. On its first
flight in April 2023, it became the largest and most powerful
rocket ever flown.
topic None
url https://en.wikipedia.org/wiki/SpaceX
2. ====================================================================
icon
text SpaceX Kategorie
topic None
url https://duckduckgo.com/c/SpaceX
chat
ddgs chat --help
Usage: ddgs chat [OPTIONS]
CLI function to perform an interactive AI chat using DuckDuckGo API.
Options:
-l, --load load the last conversation from the json cache
-p, --proxy TEXT the proxy to send requests, example:
socks5://127.0.0.1:9150
-ml, --multiline multi-line input
-t, --timeout INTEGER timeout value for the HTTP client
-m, --model [1|2|3|4]
--help Show this message and exit.
m =1でgpt-3.5、m = 2でclaude-3-haiku、m =3でllama-3-70b、m = 4でmixtral-8x7bが使えます。 回答のtokenも表示されます。
ddgs chat -m 1
------------------------------------------------------------------------------
You[model='gpt-3.5' tokens=0]: hi
AI: Hello! How can I assist you today?
------------------------------------------------------------------------------
You[model='gpt-3.5' tokens=10]:
ddgs chat -m 2
------------------------------------------------------------------------------
You[model='claude-3-haiku' tokens=0]: hi
AI: Hello! I'm an AI assistant created by Anthropic. I'm happy to chat with you and help out however I can. Please let me know if you have any questions or if there's anything I can assist with.
------------------------------------------------------------------------------
You[model='claude-3-haiku' tokens=15]
ddgs chat -m 3
------------------------------------------------------------------------------
You[model='llama-3-70b' tokens=0]: hi
AI: Hi! It's nice to meet you. Is there something I can help you with or would you like to chat about something in particular?
------------------------------------------------------------------------------
You[model='llama-3-70b' tokens=29]:
ddgs chat -m 4
------------------------------------------------------------------------------
You[model='mixtral-8x7b' tokens=0]: hi
AI: Hello! How can I assist you today? I'm here to provide anonymous and private assistance, as DuckDuckGo's privacy layer ensures that all user chats are completely anonymous and your personal information is safe. I can help you with a wide range of topics, including answering questions, providing explanations, and even offering programming advice. Just let me know what you need!
------------------------------------------------------------------------------
You[model='mixtral-8x7b' tokens=80]
日本語も使えます。
ddgs chat -m 1
------------------------------------------------------------------------------
You[model='gpt-3.5' tokens=0]:
------------------------------------------------------------------------------
You[model='gpt-3.5' tokens=0]: can you use japanese?
AI: はい、日本語を使用することができます。どのようにお手伝いしましょうか?
------------------------------------------------------------------------------
You[model='gpt-3.5' tokens=37]: こんにちは
AI: こんにちは!お困りごとはありますか?お手伝いできることがあればお知らせください。
------------------------------------------------------------------------------
You[model='gpt-3.5' tokens=69]: 日本の総理大臣は誰ですか?
AI: 2021年11月時点で日本の総理大臣は岸田文雄(きしだ ふみお)氏です。
------------------------------------------------------------------------------
You[model='gpt-3.5' tokens=103]:
images
ddgs images --help
Usage: ddgs images [OPTIONS]
CLI function to perform a images search using DuckDuckGo API.
Options:
-k, --keywords TEXT keywords for query [required]
-r, --region TEXT wt-wt, us-en, ru-ru, etc. -region
https://duckduckgo.com/params
-s, --safesearch [on|moderate|off]
-t, --timelimit [Day|Week|Month|Year]
-size, --size [Small|Medium|Large|Wallpaper]
-c, --color [color|Monochrome|Red|Orange|Yellow|Green|Blue|Purple|Pink|Brown|Black|Gray|Teal|White]
-type, --type_image [photo|clipart|gif|transparent|line]
-l, --layout [Square|Tall|Wide]
-lic, --license_image [any|Public|Share|Modify|ModifyCommercially]
-m, --max_results INTEGER maximum number of results, default=90
-o, --output TEXT csv, json (save the results to a csv or json
file)
-d, --download download and save images to 'keywords'
folder
-th, --threads INTEGER download threads, default=10
-p, --proxy TEXT the proxy to send requests, example:
socks5://127.0.0.1:9150
--help Show this message and exit.
画像はBingをsourceにしている場合が多い印象です。
ddgs images -k olympic -r jp-jp -s off
1. =========================================================================
title オリンピックチャンネル - Wikipedia
image https://upload.wikimedia.org/wikipedia/commons/a/a4/Olympic_Channel_logo.png
thumbnail https://tse3.mm.bing.net/th?id=OIP._9c2ogimnI0coQuJts_BcwHaE8&pid=Api
url https://ja.wikipedia.org/wiki/オリンピックチャンネル
height 800
width 1200
source Bing
2. =========================================================================
title Berliner Tageszeitung - Olympic icon Felix making presence felt at ...
image https://www.berlinertageszeitung.de/media/shared/articles/2e/34/61/Olympic-icon-Felix-making-presence--479451.jpg
thumbnail https://tse3.mm.bing.net/th?id=OIF.KIQui3+8vXfAycNzMg86Ug&pid=Api
url https://www.berlinertageszeitung.de/en/Sports/461958-olympic-icon-felix-making-presence-felt-at-paris-games.html
height 533
width 950
source Bing
3. =========================================================================
title Perth SC vs Olympic Kingsway Prediction, Odds & Betting Tips 07/26/2024
image https://cdn.betimate.com/800x0/left/top/smart/https://betimate.com/uploads/images/news/perth-sc-vs-olympic-kingsway-content-1721890943.jpg
thumbnail https://tse1.mm.bing.net/th?id=OIF.eUvVZOWp5mtN0+RmBMNkUA&pid=Api
url https://betimate.com/en/news/previews/perth-sc-vs-olympic-kingsway-prediction-odds-betting-tips-07262024-1440987
height 276
width 474
source Bing
「-d」を指定すると検索結果の画像を一括でダウンロードできます。 関係する画像を一気にダウンロードしたい場合に便利そうです。
ddgs images -k olympic -r jp-jp -s off -d
Downloading [###-----------------------------------------------] 6/90 6% 00:00:28
maps
ddgs maps --help
Usage: ddgs maps [OPTIONS]
CLI function to perform a maps search using DuckDuckGo API.
Options:
-k, --keywords TEXT keywords for query [required]
-p, --place TEXT simplified search - if set, the other parameters
are not used
-s, --street TEXT house number/street
-c, --city TEXT city of search
-county, --county TEXT county of search
-state, --state TEXT state of search
-country, --country TEXT country of search
-post, --postalcode TEXT postalcode of search
-lat, --latitude TEXT if lat and long are set, the other params are not
used
-lon, --longitude TEXT if lat and long are set, the other params are not
used
-r, --radius INTEGER expand the search square by the distance in
kilometers
-m, --max_results INTEGER number of results, default=50
-o, --output TEXT csv, json (save the results to a csv or json
file)
-proxy, --proxy TEXT the proxy to send requests, example:
socks5://127.0.0.1:9150
--help Show this message and exit.
店舗の営業時間や電話番号、緯度経度を調べたい場合に便利かもしれません。
ddgs maps -k "tokyo tower" -p "tokyo"
1. =========================================================================
title Tokyo Tower
address 4-chome 2-8, 芝公園, JP 105-0011
country_codeNone
url https://www.tokyotower.co.jp
phone +81334335111
latitude 35.6585581
longitude 139.7455037
source https://www.tripadvisor.com/Attraction_Review-g14129730-d320047-Reviews-Tokyo_Tower-Shibakoen_Minato_Tokyo_Tokyo_Prefecture_Kanto.html?m=63959
image
desc
hours {'Fri': '09:00:00-23:00:00', 'Mon': '09:00:00-23:00:00', 'Sat':
'09:00:00-23:00:00', 'Sun': '09:00:00-23:00:00', 'Thu':
'09:00:00-23:00:00', 'Tue': '09:00:00-23:00:00', 'Wed':
'09:00:00-23:00:00', 'closes_soon': 0, 'is_open': 0, 'opens_soon':
1, 'state_switch_time': '09:00'}
category Point of interest
facebook
instagram
twitter
postcodeも使えるらしいので、「郵便番号から住所を検索したいときに便利なのでは?」と思ったのですが、日本の郵便番号には対応していないかもしれません。 下記を実行しましたが、レスポンスが空でした。
ddgs maps -k "japan" -post 105-0004
ddgs maps -k "japan" -post 1050004
ddgs maps -k "japan" -post "1050004"
ddgs maps -k "japan" -post "105-0004"
ddgs maps -k "*" -post "105-0004"
テキスト検索機能で郵便番号を検索することはできますが、これをするなら別の方法で住所検索をする方が良さそうです。
ddgs text -k "postcode 105-0004" -r "jp-jp" -m 2
1. =========================================================================
title Postal Code 105-0004: Shin Bashi, Minato-ku, Tokyo
href https://www.japanpostalcode.net/cp110440/zip-code-105-0004-shin-bashi-minato-ku-tokyo
body Details for Japan Zip Code 105-0004: Shin Bashi, Minato-ku, Tokyo. Including
how to write address correctly in the envelope or label so your
correspondence or parcel arrive there. ... Toggle navigation Japan
Postal Code. How Postal Codes are Structured; Home > Tokyo >
Minato-ku > Shin Bashi Postal Code 105-0004: Shin Bashi, Minato-
ku, Tokyo ...
2. =========================================================================
title 郵便番号 105-0004 の検索結果 - 日本郵便 - Japan Post
href https://www.post.japanpost.jp/cgi-zip/zipcode.php?zip=105-0004
body 郵便番号の一部から、お探しの郵便番号と住所を調べることができます。
news
ddgs news --help
Usage: ddgs news [OPTIONS]
CLI function to perform a news search using DuckDuckGo API.
Options:
-k, --keywords TEXT keywords for query [required]
-r, --region TEXT wt-wt, us-en, ru-ru, etc. -region
https://duckduckgo.com/params
-s, --safesearch [on|moderate|off]
-t, --timelimit [d|w|m|y] day, week, month, year
-m, --max_results INTEGER maximum number of results, default=25
-o, --output TEXT csv, json (save the results to a csv or json
file)
-p, --proxy TEXT the proxy to send requests, example:
socks5://127.0.0.1:9150
--help Show this message and exit.
特定のキーワードに関係するニュースを定期的にチェックしたい場合に便利そうです。
ddgs news -k olympic -r jp-jp -m 10
1. =========================================================================
date 2024-07-27T18:06:00+00:00
title 夏季五輪 日本 メダル総数500個達成 パリオリンピック
body パリオリンピックで、柔道女子48キロ級の角田夏実選手が金メダルを獲得し、夏のオリンピックでの日本のメダルが合計500個に達しました。初参加から112年、日本
の選手たちが世界の舞台で築き上げてきた金字塔です。
url https://www3.nhk.or.jp/news/html/20240728/k10014526821000.html
image https://www3.nhk.or.jp/news/html/20240728/K10014526821_2407280422_0728043857_01_02.jpg
source NHK
2. =========================================================================
・・・
suggestions
ddgs suggestions --help
Usage: ddgs suggestions [OPTIONS]
CLI function to perform a suggestions search using DuckDuckGo API.
Options:
-k, --keywords TEXT keywords for query [required]
-r, --region TEXT wt-wt, us-en, ru-ru, etc. -region
https://duckduckgo.com/params
-o, --output TEXT csv, json (save the results to a csv or json file)
-p, --proxy TEXT the proxy to send requests, example:
socks5://127.0.0.1:9150
--help Show this message and exit.
キーワードに関係する別のキーワードを提案してくれるAPIです。
ddgs suggestions -k summer -r jp-jp
1. =========================================================================
phrase summer
2. =========================================================================
phrase summer sonic
3. =========================================================================
phrase summer pockets
4. =========================================================================
phrase summer 久石譲
5. =========================================================================
phrase summer game fest 2024
6. =========================================================================
phrase summer clover
7. =========================================================================
phrase summertime
8. =========================================================================
phrase summer 楽譜
text
ddgs text --help
Usage: ddgs text [OPTIONS]
CLI function to perform a text search using DuckDuckGo API.
Options:
-k, --keywords TEXT text search, keywords for query [required]
-r, --region TEXT wt-wt, us-en, ru-ru, etc. -region
https://duckduckgo.com/params
-s, --safesearch [on|moderate|off]
-t, --timelimit [d|w|m|y] day, week, month, year
-m, --max_results INTEGER maximum number of results, default=20
-o, --output TEXT csv, json (save the results to a csv or json
file)
-d, --download download results to 'keywords' folder
-b, --backend [api|html|lite] which backend to use
-th, --threads INTEGER download threads, default=10
-p, --proxy TEXT the proxy to send requests, example:
socks5://127.0.0.1:9150
--help Show this message and exit.
実行結果
ddgs text -k "tokyo sky tree" -r jp-jp
1. =========================================================================
title Tokyo Skytree
href https://www.tokyo-skytree.jp/en/
body TOKYO SKYTREE is the world's tallest tower at 634 meters, offering panoramic
views of Tokyo and various attractions. Check the opening hours,
today's lighting, and special events for TOKYO SKYTREE 2024.
2. =========================================================================
title Tokyo Skytree - Wikipedia
href https://en.wikipedia.org/wiki/Tokyo_Skytree
body Tokyo Skytree (東京スカイツリー, Tōkyō Sukaitsurī, [toːkʲoː sɯ̥kaitsɯriː] ⓘ) is a
broadcasting and observation tower in Sumida, Tokyo.It became the
tallest tower in Japan in 2010 and reached its full height of 634
meters (2,080 ft) in March 2011, making it the tallest tower in
the world, displacing the Canton Tower, and the third tallest
structure in the world after Merdeka ...
translate
ddgs translate --help
Usage: ddgs translate [OPTIONS]
CLI function to perform translate using DuckDuckGo API.
Options:
-k, --keywords TEXT text for translation [required]
-f, --from_ TEXT What language to translate from (defaults
automatically)
-t, --to TEXT de, ru, fr, etc. What language to translate,
defaults='en'
-o, --output TEXT csv, json (save the results to a csv or json file)
-p, --proxy TEXT the proxy to send requests, example:
socks5://127.0.0.1:9150
--help Show this message and exit.
実行結果。翻訳の精度はわかりません。翻訳精度に不満がある場合は、chat APIに翻訳してもらうのもありかもしれません。
ddgs translate -k "こんにちは" -t en
1. ==============================================================================
language ja
translated Hello
original こんにちは
ddgs translate -k "こんにちは" -t ko
1. ==============================================================================
language ja
translated 안녕하세요
original こんにちは
version
ddgs version
6.2.4
videos
ddgs videos --help
Usage: ddgs videos [OPTIONS]
CLI function to perform a videos search using DuckDuckGo API.
Options:
-k, --keywords TEXT keywords for query [required]
-r, --region TEXT wt-wt, us-en, ru-ru, etc. -region
https://duckduckgo.com/params
-s, --safesearch [on|moderate|off]
-t, --timelimit [d|w|m] day, week, month
-res, --resolution [high|standart]
-d, --duration [short|medium|long]
-lic, --license_videos [creativeCommon|youtube]
-m, --max_results INTEGER maximum number of results, default=50
-o, --output TEXT csv, json (save the results to a csv or json
file)
-p, --proxy TEXT the proxy to send requests, example:
socks5://127.0.0.1:9150
--help Show this message and exit.
実行結果
ddgs videos -k "rainy75" -m 2
1. =========================================================================
content https://www.youtube.com/watch?v=XBhQN0QnD-E
description Pre-order Rainy75 Here:
https://www.kickstarter.com/projects/keeb/rainy-75-keyboard-
redefining-90-ish-mechanical-keyboards Rainy75 Specs:
https://www.wobkey.com/pages/specs Rainy75 Json Files:
http://woblab.cn/ Glad I tried this long review format but not
doing it again. 0:00 Intro/Unboxing 0:28 Context/Unboxing 0:54
Packaging/Unboxing 1:06 ...
duration 11:26
embed_html <iframe width="1280" height="720"
src="https://www.youtube.com/embed/XBhQN0QnD-E?autoplay=1"
frameborder="0" allowfullscreen></iframe>
embed_url https://www.youtube.com/embed/XBhQN0QnD-E?autoplay=1
image_token 65fbc1dd2834c774a37cf72f9b04ed0c8d85eadd07e2f0c9ec7e36b79e4bdc1d
images {'large':
'https://tse2.mm.bing.net/th?id=OVP.DBJGAp3nC-Q7BkR6hkJwWwEsDh&pid
=Api', 'medium': 'https://tse2.mm.bing.net/th?id=OVP.DBJGAp3nC-Q7B
kR6hkJwWwEsDh&pid=Api', 'motion': 'https://tse3.mm.bing.net/th?id=
OM1.mt7LKOqz6BWiBQ_1708406101&pid=Api', 'small': 'https://tse2.mm.
bing.net/th?id=OVP.DBJGAp3nC-Q7BkR6hkJwWwEsDh&pid=Api'}
provider Bing
published 2024-01-29T14:00:32.0000000
publisher YouTube
statistics {'viewCount': 16127}
title Easy to use and love | In-depth Rainy75 Review
uploader alcekeys
2. =========================================================================
content https://www.youtube.com/watch?v=vpFL6Qq-Gj4
description The Wobkey Rainy75 is a gasket mount 75% keyboard with 2.4 GHz and Bluetooth
Wireless, pre-lubed HMX Violet switches, double-shot PBT keycaps,
RGB lighting, flex cuts, 1.2 mm PCB, Polypropylene flex cut plate,
pre-lubed M-One stabilizers, an Aluminum case, bottom weight, and
VIA compatibility. This board sems to tick every feature there is
to ...
duration 12:47
embed_html <iframe width="1280" height="720" src="https://www.youtube.com/embed/vpFL6Qq-
Gj4?autoplay=1" frameborder="0" allowfullscreen></iframe>
embed_url https://www.youtube.com/embed/vpFL6Qq-Gj4?autoplay=1
image_token 2df0f46d1670d62fe143bd39d9bb593e03a25005991db550447b70eee2e0c326
images {'large': 'https://tse1.mm.bing.net/th?id=OVP.ZOasPnyC_kt-
hjx8-9aCZgHgFo&pid=Api', 'medium':
'https://tse1.mm.bing.net/th?id=OVP.ZOasPnyC_kt-
hjx8-9aCZgHgFo&pid=Api', 'motion': 'https://tse3.mm.bing.net/th?id
=OM2.TnAat_7_izOJQA_1707074189&pid=Api', 'small':
'https://tse1.mm.bing.net/th?id=OVP.ZOasPnyC_kt-
hjx8-9aCZgHgFo&pid=Api'}
provider Bing
published 2024-01-14T16:00:35.0000000
publisher YouTube
statistics {'viewCount': 20777}
title Wobkey Rainy75 Review: So Much Keyboard For So Little Money!
uploader The Manic Geek
プライバシーへの配慮もDuckDuckGoの強み
DuckDuckGoはユーザーのプライバシーを大切にしています。 そのため、ユーザーの検索結果を学習データに使ったりトラッキングはしません。 また、外部のChat AI(Chat GPT、Claude3)にデータを送信する場合にもユーザーのIPアドレスなど個人に関する情報は削除した上でChatGPTなどに送信しており、更にユーザーのテキストデータを学習に使わない契約や、30日経過後にデータを削除する契約を結んでいるようです。
How does DuckDuckGo AI Chat protect my privacy? | DuckDuckGo Help Pages
最後に
DuckDuckGoのAPIを試してみました。検索に関係する定型作業を自動化するときに便利そうですね。 APIの実行結果を見ていると、一部の検索結果でBing Web Search APIの結果を使っていそうです。 おそらく自前のクローラーが集めたデータにプラスしてBing Searchの結果を使っているのではないかと思います。
Bing Search APIやChatGPT、Claudeなど、本来有料のサービスの機能をAPIで無料で提供してくれるなんてかなり太っ腹ですね。ユーザーとしてはとてもありがたいのですが、DuckDuckGo側が大丈夫なのかと心配してしまいます。 それなりの期間APIの提供を継続しているようなので(※1)、おそらく予算面のバランスは取れているのでしょう(※2)。
DuckDuckGoはMailのリレーサービスなども提供しています。検索APIだけでなくメールの方も便利に使わせてもらおうと思います。
※1 duckduckgo-searchのライブラリが2021年4月から公開されているので、少なくともその頃にはAPIが提供されていたようです。
※2 流石に無制限で検索できるわけではなく、Rate Limitは設定されているみたいです。
What is the exact rate limit of DDG? · Issue #198 · deedy5/duckduckgo_search · GitHub