Tony Wang6 min de lecturaCómo hacer scraping de Yahoo Search en 2026 (API y Python)
Scrape Yahoo Search en 2026: resultados orgánicos en JSON estructurado con URLs de destino decodificadas — Python DIY, no-code o una API.
La forma más rápida de hacer scraping de Yahoo Search en 2026 es llamar a una API de búsqueda estructurada que devuelve JSON normalizado — resultados orgánicos con títulos, URLs de destino decodificadas y fragmentos — en lugar de parsear tú mismo la página de resultados renderizada por el servidor de Yahoo. Todavía puedes construir un scraper DIY en Python, pero la propia API de búsqueda de Yahoo no está ahí como respaldo: Yahoo cerró BOSS (Build your Own Search Service) hace años y nunca ha lanzado un reemplazo público.
Por qué hacer scraping de Yahoo Search
- Seguimiento de rankings entre motores. Los resultados de Yahoo difieren de los de Google y Bing; ejecutar el mismo conjunto de consultas en Yahoo junto a otros motores muestra si un movimiento de ranking es de todo el sitio o específico del motor.
- Monitoreo de SERP en mercados relevantes para Yahoo. Yahoo todavía tiene una cuota de búsqueda significativa en algunas regiones y datos demográficos — vale la pena rastrearlo directamente en lugar de asumir que la cuota de Google cuenta toda la historia.
- AI grounding y RAG. Alimenta un pipeline con resultados web en vivo de la opinión de un segundo motor sin construir tu propio crawler.
- Flujos de descubrimiento web. Usa los resultados orgánicos como lista semilla para más crawling o investigación sobre un tema.
- Monitoreo competitivo y de marca. Rastrea qué dominios se posicionan para un conjunto de palabras clave a lo largo del tiempo, incluidos nuevos entrantes y posiciones perdidas.
¿Es legal hacer scraping de Yahoo Search?
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://search.yahoo.com/search",
params={"p": "ai agents"},
headers={"User-Agent": "Mozilla/5.0 (compatible; research-bot/1.0)"},
)
soup = BeautifulSoup(resp.text, "html.parser")
# Organic results sit in markup that shifts without notice, and every
# result link is wrapped in a r.search.yahoo.com/... click-tracking
# redirect rather than the real destination URL.
Funciona una vez y luego se rompe:
- Sin API oficial como respaldo. Yahoo cerró BOSS hace años y no ha publicado ningún reemplazo público — un scraper DIY roto no tiene nada oficial detrás.
- Redirecciones de click-tracking, no URLs reales. Cada enlace de resultado está envuelto en
r.search.yahoo.com/...; un parser simple te da el envoltorio de la redirección, y tienes que decodificarlo tú mismo antes de que la URL sea utilizable para el seguimiento de rankings o un cruce de dominios. - Desafíos anti-bot. Las peticiones marcadas como automatizadas reciben un CAPTCHA o una respuesta bloqueada en lugar de resultados — la propia petición upstream de Crawlora contra este endpoint devuelve un
503cuando Yahoo sirve un desafío. - Deriva del markup. Los contenedores de resultados y los nombres de clase cambian sin previo aviso, y los selectores devuelven silenciosamente una lista vacía en lugar de fallar de forma ruidosa.
- Riesgo de los Términos de Servicio. Los ToS de Yahoo nombran específicamente "robots, arañas, crawlers, scrapers" — un scraper DIY es exactamente la actividad que prohíbe la cláusula.
Opción 2: Herramientas no-code
Las extensiones de navegador y los scrapers de apuntar y hacer clic pueden extraer una lista puntual de resultados de Yahoo, pero no decodifican la redirección de click-tracking por ti, resultan incómodas de programar para el seguimiento recurrente de rankings, y siguen rompiéndose cuando cambia el markup de la página de Yahoo.
Opción 3: Una API estructurada de Yahoo Search
La Yahoo Search API de Crawlora lee la propia página de búsqueda renderizada por el servidor de Yahoo y devuelve los resultados orgánicos como JSON normalizado, con la redirección de click-tracking ya decodificada:
curl -G "https://api.crawlora.net/api/v1/yahoo-search/search" \
-H "x-api-key: $CRAWLORA_API_KEY" \
--data-urlencode "q=ai agents" \
--data-urlencode "page=1"
import requests
resp = requests.get(
"https://api.crawlora.net/api/v1/yahoo-search/search",
headers={"x-api-key": "YOUR_API_KEY"},
params={"q": "ai agents", "page": 1},
)
for row in resp.json()["data"]["results"]:
print(row["position"], row["title"], row["url"])
Una respuesta es JSON normalizado que puedes almacenar directamente (los campos que se muestran son ilustrativos — revisa la documentación para el esquema actual):
{
"code": 200,
"msg": "OK",
"data": {
"query": "openai",
"results": [
{
"position": 1,
"title": "OpenAI | Research & Deployment",
"url": "https://openai.com/",
"description": "We believe our research will eventually lead to artificial general intelligence, a system that can solve human-level problems.",
"hostname": "openai.com"
}
],
"pagination": { "page": 1, "next_page": 2 }
}
}
url siempre es la URL de destino decodificada — nunca el enlace de redirección crudo r.search.yahoo.com/... de Yahoo — así que el seguimiento de rankings se cruza limpiamente contra tu propia lista de dominios sin un paso extra de decodificación. Recorre más resultados con page:
BASE = "https://api.crawlora.net/api/v1/yahoo-search"
headers = {"x-api-key": "YOUR_API_KEY"}
all_results = []
page = 1
while True:
data = requests.get(f"{BASE}/search", headers=headers, params={"q": "ai agents", "page": page}).json()["data"]
all_results.extend(data["results"])
if not data["pagination"].get("next_page"):
break
page = data["pagination"]["next_page"]
Ejecuta la misma consulta de forma programada y compara el conjunto de resultados con la ejecución anterior para monitorear cambios de posición, nuevos entrantes y posiciones perdidas.
Qué puedes recopilar
Solo resultados web orgánicos públicos: position, title, url de destino decodificada, fragmento de description y hostname, además de pagination por página (page, next_page). No hay módulo de imágenes, noticias ni video en este endpoint — cubre únicamente los resultados de búsqueda web de Yahoo, no Yahoo Finance, Yahoo News ni ninguna otra propiedad de Yahoo.
Limitaciones y retos comunes
- Sin API oficial como respaldo. BOSS desapareció y Yahoo no tiene ningún reemplazo público — no hay ningún canal oficial al que escalar si una petición resulta bloqueada.
- Desafíos anti-bot. Una respuesta bloqueada o con CAPTCHA devuelve
503; las peticiones automatizadas que parecen inusuales reciben un desafío en lugar de resultados. - La decodificación de la redirección es fácil de hacer mal en DIY. El envoltorio de click-tracking de Yahoo no es un simple parámetro de query string que puedas eliminar — decodificarlo de forma fiable es una de las principales razones por las que un parser HTML crudo subcuenta las URLs utilizables.
- Sesgo de motor único. El ranking de Yahoo difiere de los de Google y Bing — trátalo como su propia serie y combínalo con otros motores en lugar de asumir que coinciden.
- Solo resultados web. Este endpoint es la búsqueda web general de Yahoo — no son los datos de cotizaciones/tickers de Yahoo Finance, que es un producto completamente distinto y una API separada.
Dónde se usa esto
- Seguimiento de rankings entre motores — cruza
position/hostnamecontra tu propia lista de dominios en Yahoo, Google y Bing para ver dónde una ganancia o pérdida de ranking es específica de un motor. - Pipelines de descubrimiento web — usa los resultados decodificados de
urlcomo lista semilla para más crawling o investigación de contenido. - Monitoreo competitivo — rastrea qué dominios mantienen las primeras posiciones para un conjunto de palabras clave a lo largo del tiempo.
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.
Combina Yahoo Search con un motor principal para el seguimiento de rankings entre motores — consulta cómo hacer scraping de Bing y cómo hacer scraping de Brave Search. Si buscas datos de cotizaciones, tickers y fundamentales de Yahoo en lugar de resultados de búsqueda web, consulta cómo hacer scraping de Yahoo Finance — un producto completamente distinto cubierto por una API separada. Para una comparación más amplia entre motores, consulta las mejores API de SERP en 2026, y para los conceptos legales básicos, consulta ¿es legal el web scraping en 2026?.
Prueba el endpoint en el Playground, lee el esquema de petición y respuesta en la documentación de la API y revisa los costos en créditos en la página de precios.
Preguntas frecuentes
¿Existe una API oficial de búsqueda de Yahoo?
No. Yahoo cerró su API de búsqueda BOSS y no ha publicado ningún reemplazo público. El endpoint de Crawlora lee la propia página de búsqueda renderizada por el servidor de Yahoo y devuelve los resultados orgánicos como JSON normalizado.
¿Obtengo la URL de destino real o la redirección de Yahoo?
La real. Yahoo envuelve cada enlace de resultado en una redirección de click-tracking; este endpoint la decodifica y devuelve la URL de destino, que es lo que hace que el seguimiento de rankings contra tus propios dominios funcione.
¿Cómo funciona la paginación?
El parámetro page recorre las páginas de resultados de Yahoo — no hay cursor, y los números de página corresponden a la misma paginación que usa la propia interfaz de Yahoo.
¿Cómo busco en Yahoo con una API?
Envía una palabra clave como q al endpoint /yahoo-search/search de Crawlora y obtén resultados orgánicos normalizados como JSON estructurado — sin necesidad de una cuenta de Yahoo.