<feed xmlns='http://www.w3.org/2005/Atom'>
<title>searxng/searx/engines/duckduckgo_web.py, branch master</title>
<subtitle>Free internet metasearch engine which aggregates results from various search services and databases</subtitle>
<id>https://git.ikboikov.net/searxng/atom?h=master</id>
<link rel='self' href='https://git.ikboikov.net/searxng/atom?h=master'/>
<link rel='alternate' type='text/html' href='https://git.ikboikov.net/searxng/'/>
<updated>2026-06-13T07:35:14Z</updated>
<entry>
<title>[fix] duckduckgo web: result title contains html (#6253)</title>
<updated>2026-06-13T07:35:14Z</updated>
<author>
<name>Bnyro</name>
<email>bnyro@tutanota.com</email>
</author>
<published>2026-06-13T07:35:14Z</published>
<link rel='alternate' type='text/html' href='https://git.ikboikov.net/searxng/commit/?id=8522638b00ff055a0797c6cb8c2e8a6f036e4dc8'/>
<id>urn:sha1:8522638b00ff055a0797c6cb8c2e8a6f036e4dc8</id>
<content type='text'>
</content>
</entry>
<entry>
<title>[feat] engines: add duckduckgo web engine as alternative to html.duckduckgo.com</title>
<updated>2026-06-10T14:49:56Z</updated>
<author>
<name>Bnyro</name>
<email>bnyro@tutanota.com</email>
</author>
<published>2026-06-01T09:01:23Z</published>
<link rel='alternate' type='text/html' href='https://git.ikboikov.net/searxng/commit/?id=f4c63c8eb03db3b880a5afe986a46dc9737c72e5'/>
<id>urn:sha1:f4c63c8eb03db3b880a5afe986a46dc9737c72e5</id>
<content type='text'>
html.duckduckgo.com captchas all my IPs very fast. I figured out that using
duckduckgo.com works even if html.duckduckgo.com is captcha-ed, hence adding
support for duckduckgo.com's general web search here.

This implementation fetches the link to the first API page
(i.e. ``links.duckduckgo.com/d.js?...``) from duckduckgo.com and uses the ``n``
parameter of the API to fetch all subsequent pages.

This also means that it's not possible to immediately search for the third
page - the first and the second page would need to be loaded first.

The reason why we can't just normally use the `vqd` value is that the API URLs
require an additional parameter `dp` which seems generated at server-side, so we
can't build it ourselves and must scrape it from the HTML pages.
</content>
</entry>
</feed>
