Tony Wang5 min de lecturaCómo hacer scraping de DuckDuckGo en 2026 (API y Python)
Scraping de DuckDuckGo en 2026: web, imágenes, noticias, compras y video como JSON con URLs decodificadas — DIY, no-code o API estructurada.
La forma más rápida de hacer scraping de DuckDuckGo en 2026 es llamar a una API estructurada que devuelve JSON normalizado en cinco verticales — web, imágenes, noticias, compras y video — en lugar de parsear tú mismo las páginas de resultados renderizadas por el servidor de DuckDuckGo. No hay una forma oficial de obtener resultados web orgánicos de manera programática: la propia Instant Answer API de DuckDuckGo solo devuelve resúmenes de respuestas instantáneas por tema, no la lista de resultados ordenada. Esta guía cubre los tres enfoques, qué devuelve cada uno, dónde falla el DIY y los aspectos legales básicos.
¿Por qué hacer scraping de DuckDuckGo?
Los resultados de DuckDuckGo alimentan:
- Seguimiento de SERP centrado en privacidad — DuckDuckGo ejecuta sus propios resultados combinados (no es un espejo puro de Google ni de Bing), así que aporta una cobertura distinta a la de ambos.
- Investigación de búsqueda en un motor no personalizado — DuckDuckGo no construye perfiles de usuario, así que sus resultados son una base más limpia para estudiar el ranking orgánico sin el ruido de la personalización.
- Monitoreo entre verticales — sigue una consulta o una marca en resultados web, de imágenes, noticias, compras y video en una sola pasada.
- Comparación competitiva y de mercado — el filtro
regionte permite ver cómo se posiciona de forma distinta la misma consulta en diferentes mercados. - Seguimiento de noticias y web filtrado por antigüedad — el filtro
time_rangeacota los resultados web al último día, semana, mes o año para el monitoreo sensible a la actualidad.
¿Es legal hacer scraping de DuckDuckGo?
Opción 1: DIY en Python (y por qué se rompe)
Un enfoque ingenuo consiste en descargar la página de resultados y parsear el HTML:
import requests
from bs4 import BeautifulSoup
resp = requests.get(
"https://html.duckduckgo.com/html/",
params={"q": "ai agents"},
headers={"User-Agent": "Mozilla/5.0"},
)
soup = BeautifulSoup(resp.text, "html.parser")
# Result links are wrapped in DuckDuckGo's own redirect
# (duckduckgo.com/l/?uddg=...) and have to be decoded before use
Esto funciona una vez y luego se rompe. Los costos recurrentes:
- Sin API oficial de resultados web. DuckDuckGo publica una Instant Answer API, pero devuelve respuestas instantáneas y resúmenes por tema — no la lista de resultados orgánicos — así que no hay nada oficial que llamar en lugar de la página HTML.
- Limitación de tasa y páginas de desafío. Más allá de un volumen bajo de tipo hobby, DuckDuckGo devuelve respuestas 202/403 o un muro de CAPTCHA al tráfico automatizado, y las llamadas ingenuas con
requestslo alcanzan rápido. - Enlaces de resultado envueltos. Cada URL de resultado es una redirección de seguimiento de clics (
duckduckgo.com/l/?uddg=...), así que tienes que decodificarla tú mismo para obtener la URL de destino real y el hostname. - Cinco verticales separadas. Los resultados web, de imágenes, noticias, compras y video se renderizan cada uno con su propio markup, así que un único parser no los cubre todos — necesitas uno por vertical, y cada uno cambia de forma independiente.
La mayor parte del costo no está en el primer scrape — está en mantener cinco parsers vivos contra cambios de diseño y límites de tasa a la vez.
Opción 2: Herramientas no-code
Las extensiones de navegador y los scrapers de apuntar y hacer clic pueden extraer una página de resultados puntual de DuckDuckGo, pero no decodifican la redirección de seguimiento de clics por ti, no cubren las cinco verticales en un solo flujo de trabajo, y siguen rompiéndose cuando cambian el markup o los límites de tasa de DuckDuckGo. Para una recolección recurrente que alimenta un pipeline, una API encaja mejor.
Opción 3: Una API de DuckDuckGo estructurada
La DuckDuckGo Search API de Crawlora envuelve el manejo de peticiones, los filtros de región/antigüedad/búsqueda segura, la decodificación de redirecciones y la normalización detrás de un endpoint documentado por vertical. Busca en los resultados web:
curl -G "https://api.crawlora.net/api/v1/duckduckgo/search" \
-H "x-api-key: $CRAWLORA_API_KEY" \
--data-urlencode "q=ai agents" \
--data-urlencode "region=us-en" \
--data-urlencode "time_range=w" \
--data-urlencode "safe_search=moderate"
import requests
resp = requests.get(
"https://api.crawlora.net/api/v1/duckduckgo/search",
headers={"x-api-key": "YOUR_API_KEY"},
params={"q": "ai agents", "region": "us-en", "time_range": "w", "safe_search": "moderate"},
)
for row in resp.json()["data"]["results"]:
print(row["title"], row["url"], row["hostname"])
Una respuesta es JSON normalizado con la redirección ya decodificada (los campos que se muestran son ilustrativos — revisa la documentación para el esquema actual):
{
"code": 200,
"msg": "OK",
"data": {
"query": "ai agents",
"results": [
{
"title": "Example result title",
"url": "https://example.com/",
"hostname": "example.com",
"description": "Snippet text shown under the result."
}
]
}
}
La misma clave, cuatro verticales más — cambia la ruta y mantén los mismos parámetros q y region:
h = {"x-api-key": "YOUR_API_KEY"}
base = "https://api.crawlora.net/api/v1/duckduckgo"
images = requests.get(f"{base}/images", headers=h, params={"q": "ai agents", "region": "us-en"}).json()["data"]
news = requests.get(f"{base}/news", headers=h, params={"q": "ai agents", "region": "us-en"}).json()["data"]
shopping = requests.get(f"{base}/shopping", headers=h, params={"q": "ai agents", "region": "us-en"}).json()["data"]
video = requests.get(f"{base}/video", headers=h, params={"q": "ai agents", "region": "us-en"}).json()["data"]
Una sola clave de Crawlora cubre las cinco verticales — sin una credencial separada por tipo de resultado.
Qué puedes recopilar
- Resultados web: título, URL de destino (decodificada de la redirección de DuckDuckGo), hostname y fragmento de descripción — filtrable por
time_range(d/w/m/y) ysafe_search(strict/moderate/off) - Resultados de imágenes vía el endpoint dedicado de imágenes
- Resultados de noticias vía el endpoint dedicado de noticias
- Resultados de compras vía el endpoint dedicado de compras
- Resultados de video vía el endpoint dedicado de video
- Variantes regionales de cualquier vertical vía el parámetro
region, para comparación de mercado a mercado
Limitaciones y retos comunes
- No hay una API oficial de resultados web como respaldo. La Instant Answer API de DuckDuckGo devuelve resúmenes por tema, no la lista de resultados orgánicos, así que no hay alternativa oficial si un endpoint estructurado no está disponible.
- Limitación de tasa y páginas de desafío para el DIY. El tráfico automatizado que supera un volumen bajo de tipo hobby recibe respuestas 202/403 o muros de CAPTCHA; una API estructurada gestiona esto detrás de una sola clave en lugar de que tú lo administres por petición.
- Enlaces de resultado envueltos. El envoltorio de redirección de DuckDuckGo hace que el scraping directo de HTML devuelva URLs de seguimiento, no destinos, a menos que las decodifiques tú mismo.
- Cinco verticales, cinco formas. Los resultados web, de imágenes, noticias, compras y video no comparten un esquema — usa el endpoint dedicado para la vertical que necesites en lugar de un único parser genérico.
- Los Términos de Servicio restringen el uso automatizado. El ToS de DuckDuckGo no permite el uso automatizado y no personal del sitio — factoriza eso en cómo usas cualquier dato recopilado.
Dónde se usa esto
- Seguimiento de SERP centrado en privacidad — captura rankings web en un motor no personalizado junto a Google y Bing.
- Monitoreo de marca entre verticales — comprueba la misma consulta en resultados web, de imágenes, noticias, compras y video en una sola pasada.
- Seguimiento de noticias sensible a la actualidad — usa
time_range=dowpara captar qué está posicionando en el último día o semana.
Fuentes
Empieza a recopilar
Pruébalo primero, gratis: ejecuta cualquier URL pública a través del Free Web Scraper, o comprueba si un sitio bloquea bots con el Anti-Bot Checker — sin registro.
DuckDuckGo es más útil como segundo o tercer motor centrado en privacidad junto a Google y Bing — las formas de respuesta son lo bastante consistentes como para capturar los tres con el mismo código. Combínalo con cómo hacer scraping de Brave Search para otro índice independiente, o cómo hacer scraping de Bing para la mayor alternativa no-Google. Para una comparación de herramientas más amplia, consulta las mejores API de SERP en 2026.
Empieza probando el endpoint en el Playground, leyendo el esquema de petición y respuesta en la documentación de la API y revisando los costos en créditos en la página de precios. Consulta también ¿es legal el web scraping?.
Preguntas frecuentes
¿Existe una API oficial de búsqueda de DuckDuckGo?
No para resultados web. DuckDuckGo publica una Instant Answer API, pero devuelve respuestas instantáneas y resúmenes por tema en lugar de la lista de resultados orgánicos. Los endpoints de Crawlora leen las propias páginas de búsqueda renderizadas por el servidor de DuckDuckGo y devuelven esos resultados como JSON.
¿Qué verticales son compatibles?
Web, imágenes, noticias, compras y video — cada una con su propio endpoint que toma el mismo parámetro q más una región.
¿Puedo limitar los resultados a la última semana o mes?
Sí, en la búsqueda web. time_range acepta d, w, m o y para el último día, semana, mes o año, y safe_search acepta strict, moderate u off.
¿Obtengo la URL de destino real?
Sí. DuckDuckGo envuelve cada enlace de resultado en una redirección de seguimiento de clics; este endpoint la decodifica y devuelve la URL de destino junto con el hostname.
¿Cómo busco en DuckDuckGo con una API?
Envía una palabra clave como q al endpoint /duckduckgo/search de Crawlora y obtén resultados orgánicos normalizados como JSON estructurado — no se requiere cuenta de DuckDuckGo.