Volver al blog

DeepSeek Scraper API: Captura Respuestas, Razonamiento y Fuentes como JSON

Ava Wilson
Ava Wilson

Expert in Web Scraping Technologies

11-Aug-2026

TL;DR:

  • El scraper.deepseek actor envía un aviso a DeepSeek y devuelve la respuesta como JSON. Dos entradas requeridas — prompt y country — entran; un objeto task_result con 21 campos regresa, incluyendo el markdown renderizado, el html en crudo y un conteo de tokens.
  • La traza de razonamiento está en la carga útil, no oculta tras ella. Envía thinking: true y la respuesta gana un fragmento THINK que lleva el texto de planificación paso a paso de DeepSeek más los segundos que pasó en ello.
  • Dos banderas booleanas cambian la forma de la respuesta, no solo su contenido. thinking y search añaden cada una tipos de fragmento; enviar ambas cambia a DeepSeek a una secuencia agentica que busca, abre páginas individuales y replanifica entre pasos.
  • Las claves de entrada desconocidas son aceptadas y descartadas sin comentario. web_search, thinking_enabled, search_enabled, y model devuelven HTTP 201 y no cambian nada — mientras que una clave correctamente nombrada con el tipo incorrecto devuelve 400. Porta un script de captura de otro actor y sus banderas desaparecen en el camino.
  • Las citas llegan en tres codificaciones diferentes dependiendo de las banderas que enviaste. El modo de búsqueda simple utiliza marcadores [citation:N] contra un cite_index; el modo agentico utiliza marcadores [reference:N] contra un array de punteros hacia atrás basado en cero. Esta guía muestra cómo resolver ambos.
  • Gratis para empezar. Nuevas cuentas de Scrapeless incluyen créditos de prueba gratuitos — regístrate en app.scrapeless.com.

Introducción: la respuesta es solo la mitad de la carga útil

Busca una API de scraper de DeepSeek y casi todo lo que encuentres es sobre apuntar el modelo de DeepSeek a HTML que ya has recuperado. Esa es una técnica real, y Scrapeless la cubre en la guía de scraping web de DeepSeek. Esta guía corre en la otra dirección: DeepSeek es la fuente, y los datos que deseas son lo que DeepSeek dice cuando alguien le hace una pregunta.

Esos datos importan por la misma razón que importan las respuestas de ChatGPT y Gemini. Cuando un comprador le pregunta a un asistente qué herramienta elegir, la respuesta y las páginas detrás de ella son una señal de mercado. DeepSeek añade dos cosas que los otros asistentes no entregan tan fácilmente: una traza de razonamiento expuesta, y — cuando activas ambas banderas de capacidad — un registro visible de qué páginas eligió abrir y leer en su totalidad.

El scraper.deepseek actor convierte todo eso en dos llamadas HTTP: una para enviar el aviso, otra para recoger el resultado. Esta guía cubre la forma de la solicitud, el esquema de respuesta completo capturado de ejecuciones en vivo, un cliente Python ejecutable, y la lógica de resolución de citas que la carga útil requiere y no documenta.


Lo Que Puedes Hacer Con Esto

  • Rastrear cómo DeepSeek describe tu categoría. Ejecuta un conjunto fijo de avisos en un horario y almacena la respuesta markdown más las fuentes detrás de ella.
  • Capturar el razonamiento detrás de la conclusión. El fragmento THINK muestra cómo DeepSeek enmarcó la pregunta antes de responder — útil cuando te importa por qué se recomendó un producto.
  • Medir la participación en citas. En modo de búsqueda, la carga útil lleva cada fuente que DeepSeek recuperó, con título, URL, nombre del sitio y marca de tiempo de publicación.
  • Separar las páginas que DeepSeek abrió de las que simplemente enumeró. En modo agentico, los fragmentos TOOL_OPEN registran las URL específicas que leyó de principio a fin — un conjunto mucho más estrecho que los resultados de búsqueda.
  • Comparar mercados. country fija la salida de la ejecución, por lo que el mismo aviso puede ser capturado para varias regiones y comparado.
  • Construir conjuntos de datos de respuestas. Aviso, respuesta, razonamiento y fuentes llegan como un objeto JSON por ejecución, listos para ser almacenados.

Por Qué el Scraper de DeepSeek de Scrapeless

El scraper.deepseek actor pertenece a la familia LLM Chat Scraper dentro de la línea de Universal Scraping API:

  • Un aviso entra, respuesta estructurada sale. El manejo de inicio de sesión y la reensamblaje de transmisión ocurren del lado del servidor, por lo que nunca tocas una interfaz que no fue diseñada para ser analizada.
  • El flujo de fragmentos se preserva. Razonamiento, consultas de búsqueda, páginas abiertas y la respuesta final llegan como objetos tipados separados en lugar de una cadena aplanada.
  • Salida residencial fijada por país. Las ejecuciones se dirigen a través de proxies residenciales en más de 195 países; la country entrada requerida es toda la configuración.
  • Un contrato en toda la familia. El punto final, el encabezado x-api-token, y el flujo de enviar y luego recoger son idénticos para los actores de ChatGPT, Gemini, Perplexidad, Copilot y Grok.
    Una nota sobre la documentación: el inicio rápido del Rascador de Chat LLM documenta el flujo de tareas compartido y enumera los otros actores en la familia, pero aún no tiene una página de DeepSeek. Cada campo y bandera descritos a continuación fueron capturados de ejecuciones en vivo contra el actor en lugar de leerse en una página de referencia.

Requisitos previos

  • Una cuenta de Scrapeless y una clave API — crea una en app.scrapeless.com.
  • curl y jq para la captura rápida, o Python 3.10+ para el cliente.
  • Familiaridad con HTTP y JSON.

Mantén la clave en el entorno para que nunca llegue a tu árbol de origen:

bash Copy
export SCRAPELESS_API_KEY=your_api_token_here

Cómo funciona la API del Rascador de DeepSeek

El actor es asíncrono. Creas una tarea y luego la recolectas.

  • Enviar: POST https://api.scrapeless.com/api/v2/scraper/request201 con {"status": "pending", "task_id": "..."}
  • Recolectar: GET https://api.scrapeless.com/api/v2/scraper/result/{task_id}202 con {"status": "running"} mientras la ejecución está en vuelo, luego 200 con el resultado completo
  • Encabezado de autenticación: x-api-token: $SCRAPELESS_API_KEY

El 202 está haciendo exactamente el trabajo que especifica la semántica HTTP: la solicitud fue aceptada, el procesamiento no está completo y el resultado vive en una ubicación separada. Consulta esa ubicación en un intervalo fijo hasta que responda 200. Los resultados completados se mantienen durante cinco minutos, así que recolecta con prontitud o registra un webhook en su lugar.

Parámetros de solicitud

campo de entrada requerido tipo descripción
prompt cadena la pregunta que enviar a DeepSeek
country cadena código de país de dos letras para la salida residencial de la ejecución, por ejemplo US
thinking no booleano expone la traza de razonamiento de DeepSeek como un fragmento THINK
search no booleano permite que la ejecución recupere fuentes web en vivo y las devuelve en la carga

Ambos campos requeridos son validados al enviar. Omitir country devuelve 400 con Key: 'deepseekParam.Country' Error:Field validation for 'Country' failed on the 'required' tag; omitir prompt devuelve el mensaje que coincide para Prompt. Los códigos de país siguen el estándar ISO 3166-1 alpha-2.

Captura rápida con curl

Envía la tarea, consulta hasta la finalización e imprime el resumen estructural:

bash Copy
TASK_ID=$(curl -sS -X POST https://api.scrapeless.com/api/v2/scraper/request \
  -H "Content-Type: application/json" \
  -H "x-api-token: ${SCRAPELESS_API_KEY}" \
  -d '{
    "actor": "scraper.deepseek",
    "input": {"prompt": "Explain how HTTP caching headers work.", "country": "US"}
  }' | jq -r '.task_id')
echo "task_id=${TASK_ID}"

for _ in $(seq 1 60); do
  BODY=$(curl -sS -H "x-api-token: ${SCRAPELESS_API_KEY}" \
    "https://api.scrapeless.com/api/v2/scraper/result/${TASK_ID}")
  echo "${BODY}" | jq -e '.status == "success"' >/dev/null 2>&1 && break
  sleep 4
done

echo "${BODY}" | jq -r '"status=" + .status,
  "fragments=" + ([.task_result.fragments[].type] | join(",")),
  "answer_chars=" + (.task_result.markdown | length | tostring),
  "tokens=" + (.task_result.accumulated_token_usage | tostring)'

El sobre de respuesta

Una llamada de recolección completada devuelve un documento JSON plano, muy dentro de lo que define el estándar de formato de intercambio JSON, con dos claves de nivel superior: status y task_result.

json Copy
// illustrative sample — every key and type below is from live scraper.deepseek runs; long strings abridged
{
  "status": "success",
  "task_result": {
    "markdown": "To handle caching, an HTTP response carries…",
    "html": "<p class=\"ds-markdown-paragraph\">…</p>",
    "fragments": [
      {"type": "RESPONSE", "id": 2, "stage_id": 1, "content": "To handle caching…", "references": []}
    ],
    "accumulated_token_usage": 637,
    "thinking_enabled": false,
    "search_enabled": false,
    "search_triggered": false,
    "status": "FINISHED",
    "quasi_status": "FINISHED",
    "role": "ASSISTANT",
    "message_id": 2,
    "parent_id": 1,
    "conversation_mode": "DEFAULT",
    "inserted_at": 1786037083.6987588,
    "model": "",
    "feedback": null,
    "incomplete_message": null,
    "auto_continue": false,
    "ban_edit": false,
    "ban_regenerate": false,
    "has_pending_fragment": false
  }
}

Campo por campo:

campo tipo lo que contiene
task_result.markdown cadena la respuesta en Markdown, según la especificación CommonMark — este es el campo que la mayoría de los pipelines desean
task_result.html cadena la misma respuesta en HTML renderizado, llevando los nombres de clase ds-markdown-* de DeepSeek
task_result.fragments[] arreglo el flujo ordenado de pasos tipificados que produjeron la respuesta; ver la siguiente sección
task_result.accumulated_token_usage número tokens consumidos por la ejecución
task_result.thinking_enabled booleano indica si se solicitó la traza de razonamiento
task_result.search_enabled booleano indica si se solicitó la recuperación en vivo
task_result.search_triggered booleano si la recuperación realmente se ejecutó
task_result.status / quasi_status cadena ambos leen FINISHED en una ejecución completada
task_result.role cadena ASSISTANT
task_result.message_id / parent_id número posición en la conversación; una nueva ejecución es el mensaje 2 bajo el padre 1
task_result.inserted_at número marca de tiempo Unix con segundos fraccionarios
task_result.conversation_mode cadena DEFAULT en cada ejecución capturada
task_result.model cadena vacío en cada ejecución capturada para esta guía, incluidas las ejecuciones que suministraron una entrada model
task_result.feedback / incomplete_message nulo reservado; null en ejecuciones completadas
task_result.auto_continue, ban_edit, ban_regenerate, has_pending_fragment booleano banderas de estado de interfaz, todas false en una ejecución completada

Trata model como no disponible en lugar de como un campo para leer. Si necesitas saber qué configuración produjo una captura, registra las banderas que enviaste junto con la respuesta.

Obtén tu clave API en el plan gratuito: app.scrapeless.com


El flujo de fragmentos es donde vive el detalle

fragments es el campo que separa a este actor de una captura de chat simple. Su longitud y composición cambian con los flags que envías:

flags enviados secuencia de fragmentos lo que ganas
ninguno RESPONSE solo la respuesta
thinking: true THINK, RESPONSE el texto de razonamiento y su duración
search: true SEARCH, RESPONSE las consultas que DeepSeek emitió y cada fuente que recuperó
ambos THINK, TOOL_SEARCH, THINK, TOOL_OPEN × N, THINK, RESPONSE un bucle agentivo: plan, búsqueda, replantear, abrir páginas individuales, replantear, responder

Los tipos de fragmentos llevan diferentes claves, que es la parte que rompe a los analizadores ingenuos:

  • RESPONSEcontent, id, stage_id, type, references. El content es la respuesta con marcadores de cita aún incrustados.
  • THINK — las mismas claves más elapsed_secs. En modo solo razonamiento, el trazo es un bloque largo; en modo agentivo se convierte en varias notas de planificación cortas entre llamadas a herramientas.
  • SEARCHqueries (las cadenas de búsqueda que DeepSeek compuso), results (las fuentes), status, y un content que es null. No hay stage_id.
  • TOOL_SEARCH — el equivalente en modo agentivo de SEARCH, con un stage_id añadido.
  • TOOL_OPENreference (un puntero de regreso al fragmento de búsqueda que hizo aparecer la URL) y un único objeto result para la única página que se abrió. Sin content, sin references.

Cada objeto fuente — en SEARCH.results, TOOL_SEARCH.results, y TOOL_OPEN.result — lleva las mismas ocho claves: title, url, snippet, site_name, site_icon, published_at, query_indexes, y cite_index.

Una ejecución agentiva capturada para esta guía produjo 13 fragmentos: un plan de apertura, un TOOL_SEARCH que realizó cuatro consultas y devolvió 38 URLs únicas, ocho fragmentos TOOL_OPEN para las páginas que DeepSeek eligió leer en su totalidad, dos notas más de planificación y la respuesta. El conjunto TOOL_OPEN es el interesante: esas ocho URLs son las que DeepSeek realmente leyó, a diferencia de las 38 que simplemente vio.

El comportamiento de razonamiento que esto expone es la misma capacidad descrita en el documento de aprendizaje por refuerzo DeepSeek-R1; la contribución del actor es hacer que el trazo esté disponible como un campo en lugar de un panel renderizado.


Integrando la API en Python

Un cliente completo: enviar, consultar hasta la finalización e indexar las fuentes por su número de cita.

python Copy
# deepseek_client.py — submit a prompt to scraper.deepseek and collect the result
import os
import time

import requests

BASE = "https://api.scrapeless.com/api/v2/scraper"
HEADERS = {
    "Content-Type": "application/json",
    "x-api-token": os.environ["SCRAPELESS_API_KEY"],
}


def ask_deepseek(prompt, country="US", thinking=False, search=False, interval=4):
    created = requests.post(
        f"{BASE}/request",
        headers=HEADERS,
        json={
            "actor": "scraper.deepseek",
            "input": {
                "prompt": prompt,
                "country": country,
                "thinking": thinking,
                "search": search,
            },
        },
        timeout=60,
    )
    created.raise_for_status()
    task_id = created.json()["task_id"]

    while True:
        collected = requests.get(f"{BASE}/result/{task_id}", headers=HEADERS, timeout=120)
        if collected.status_code == 200:
            return collected.json()
        if collected.status_code != 202:
            raise RuntimeError(f"task {task_id} did not complete: {collected.text}")
        time.sleep(interval)


def sources_by_citation(result):
    """Every source the run produced, keyed by the cite_index used in the answer."""
    found = {}
    for fragment in result.get("fragments") or []:
        for source in fragment.get("results") or []:
            found[source.get("cite_index")] = source
        if fragment.get("result"):
            found[fragment["result"].get("cite_index")] = fragment["result"]
    return found


if __name__ == "__main__":
    payload = ask_deepseek(
        "What are the latest developments in fusion energy research?",
        search=True,
    )
    result = payload["task_result"]
    fragments = result.get("fragments") or []
    cited = sources_by_citation(result)
    print(f"status={payload['status']} search_triggered={result['search_triggered']}")
    print("fragments=" + ",".join(f.get("type", "?") for f in fragments))
    print(f"answer_chars={len(result['markdown'])} tokens={result['accumulated_token_usage']}")
    print(f"sources={len(cited)}")
    for index in sorted(k for k in cited if isinstance(k, int))[:3]:
        source = cited[index]
        print(f"  [citation:{index}] {source['site_name']} -> {source['url']}")

Una ejecución capturada:

text Copy
status=success search_triggered=True
fragments=SEARCH,RESPONSE
answer_chars=7664 tokens=926
sources=11
  [citation:1] Lawrence Livermore National Laboratory (.gov) -> https://lasers.llnl.gov/news/llnl-experts-help-advance-inertial-fusion-energy-us-ife-conference
  [citation:2] Reuters -> https://www.reuters.com/business/energy/fusion-energy-developer-tae-signs-helium-3-future-fuel-supply-option-agreement-2026-08-05/
  [citation:3] Oak Ridge National Laboratory (.gov) -> https://www.ornl.gov/news/oak-ridge-national-lab-cleveland-clinic-and-ibm-achieve-first-known-computations-fusion?utm_source=Sutor-Group-Intelligence-and-Advisory&utm_medium=daily-links&utm_campaign=Substack

Esas etiquetas [citation:N] son los mismos marcadores incrustados en el texto de respuesta, por lo que las líneas impresas ya son un índice de citas funcional. Nota la tercera URL también: las URLs de fuente llegan exactamente como DeepSeek las encontró, incluidos los parámetros de seguimiento de referencia, así que normaliza antes de agrupar capturas por dominio o deduplicarlas.

Cambiar la llamada a thinking=True, search=True intercambia el plano SEARCH plano por la secuencia agentiva y te da el conjunto de páginas abiertas en su lugar. Ese modo es donde vive el trazo de razonamiento, y también donde la carga útil es menos predecible: consulta las siguientes dos secciones antes de basarte en ello.


Resolviendo citas

DeepSeek marca sus fuentes dentro del texto de respuesta, y el formato del marcador depende de qué flags produjeron la ejecución. Dos combinaciones de flags, tres codificaciones entre ellas, todas confirmadas contra capturas en vivo:

Solo búsqueda. El fragmento RESPONSE lleva marcadores content, donde N coincide con el campo cite_index en las entradas del fragmento SEARCH results. El markdown de nivel superior en este modo lleva una segunda codificación de la misma información: esos marcadores ya resueltos en enlaces de Markdown en línea. Un pipeline que solo necesita prosa legible puede leer markdown y omitir la unión por completo.

Pensar y buscar juntos. Los marcadores se convierten en [reference:N], y N es un índice basado en cero en el array RESPONSE del fragmento references — no un cite_index. Cada entrada en ese array es un puntero de regreso de la forma {"id": 5, "type": "TOOL_OPEN"} que identifica el fragmento que proporcionó la fuente. En este modo, el markdown de nivel superior es byte-idéntico al contenido de RESPONSE, marcadores incluidos, así que la unión depende de ti.
Ese segundo caso tiene un límite honesto que vale la pena conocer antes de que construyas un informe sobre él. Un TOOL_OPEN puntero reverso se resuelve limpiamente, porque ese fragmento contiene exactamente un result y, por lo tanto, exactamente una URL. Un TOOL_SEARCH puntero reverso no lo hace: nombra un fragmento que contiene docenas de resultados, así que te dice que la afirmación provino del paso de búsqueda sin precisar qué fuente. En una captura agentica, 45 de 69 referencias apuntaron a fragmentos TOOL_OPEN y se resolvieron en URLs específicas; los restantes 24 apuntaron al fragmento de búsqueda en su totalidad. También ten en cuenta que cite_index está null sobre los resultados dentro de fragmentos en modo agentico, por lo que no se puede usar como un recurso de respaldo allí.

La consecuencia práctica: si la atribución de fuente por afirmación es el entregable, trabaja solo con search: true y usa cite_index. Si quieres la traza de razonamiento y la lista de páginas realmente abiertas, ejecuta con ambas banderas y trata el enlace de citación como parcial.


Problemas comunes de forma de datos

  • Las claves de entrada desconocidas son aceptadas e ignoradas en silencio. Enviar web_search: true, thinking_enabled: true, search_enabled: true o model: "deepseek-reasoner" todos devolvieron 201 y produjeron una ejecución con la bandera desactivada y sin advertencia en ningún lugar de la carga útil. Los nombres de trabajo son exactamente thinking y search. Una clave correctamente nombrada con el tipo incorrecto se comporta de manera diferente: thinking: "true" como una cadena devuelve 400 invalid params; por lo tanto, la API valida tipos en las claves que reconoce y descarta el resto. Si estás portando un script de captura de ChatGPT, su bandera web_search desaparecerá y cada respuesta de DeepSeek volverá sin fuentes.
  • Un país no soportado falla en la recolección, no en la presentación. country: "ZZ" devuelve un 201 normal con un task_id; la falla aparece en la llamada de recolección como 400 con {"message": "execution failed", "status": "failed"}. Valida los códigos de país de tu lado en lugar de leer el estado de presentación como confirmación.
  • markdown y el contenido RESPONSE no siempre son la misma cadena. En modo solo búsqueda markdown es más largo, porque los marcadores de citación se han expandido en enlaces. En todos los demás modos, los dos coinciden. Elige un campo y mantente en él.
  • references no es una lista de citas. Es una matriz de punteros reversos {id, type}, y está vacía excepto en modo agentico. Las fuentes en sí viven en los fragmentos de búsqueda y abiertos.
  • Los conjuntos de claves de fragmentos difieren por tipo. SEARCH tiene queries y results pero no stage_id; TOOL_OPEN tiene reference y un result singular pero no content. Lee los fragmentos por type, nunca por posición.
  • El modo agentico varía mucho más que los modos planos. Las ejecuciones solo de búsqueda regresaron como SEARCH, RESPONSE en cada captura tomada para esta guía. Con ambas banderas activadas, capturas consecutivas del mismo aviso abrieron 8, 15 y 13 páginas, la longitud de las respuestas varió de 3,720 a 6,707 caracteres, y varias ejecuciones pasaron directamente de TOOL_SEARCH a RESPONSE sin abrir una sola página. Si tu pipeline necesita el conjunto de páginas abiertas, trata que uno vacío sea un resultado ordinario y lee la serie en lugar de una sola ejecución.
  • Una tarea puede terminar en un estado fallido, y esto aparece en la llamada de recolección. Una minoría de ejecuciones agenticas terminó como fallidas en lugar de exitosas; la llamada de recolección luego responde con 400 en lugar de 200, exactamente como lo hace un país no soportado. El cliente de arriba verifica por un 202 antes de continuar y se eleva con el cuerpo en cualquier otra cosa, por lo que el id de la tarea y el mensaje del servidor llegan a tus registros. Trata una tarea fallida como un resultado registrado en tu conjunto de datos, no como algo que encubrir.

Actores acompañantes

El punto final, encabezado y flujo de presentar y luego recolectar permanecen iguales a través de la familia; solo el nombre del actor y sus entradas específicas de la plataforma cambian:

  • scraper.chatgptprompt más country, con una bandera web_search propia.
  • scraper.gemini — las mismas dos entradas, devolviendo la respuesta más una matriz de citas.
  • scraper.perplexity — requiere country y una bandera web_search; devuelve resultados web y avisos relacionados.
  • scraper.grok — requiere un mode de razonamiento y devuelve citas de la web abierta y X como matrices separadas; cubierto en la guía de API de Grok scraper.
  • scraper.copilot y scraper.alexa — las respuestas de Copilot y Alexa surgen bajo el mismo contrato.
    Debido a que cada actor nombra sus banderas de manera diferente, mantén el generador de entrada por actor en lugar de compartir un diccionario entre ellos. La tarificación basada en el uso para la línea, con créditos de prueba gratuita al registrarse, se encuentra en la página de precios.

Conclusión: dos llamadas y una carga útil que merece ser leída detenidamente

Capturar DeepSeek son dos llamadas HTTP: POST { actor: "scraper.deepseek", input: { prompt, country } } para crear una tarea, luego GET el resultado hasta que responda 200. La respuesta está en markdown. Todo lo que hace que DeepSeek sea distinto — la traza de razonamiento, las consultas de búsqueda, las páginas que abrió — está en fragments, y solo si lo pediste con thinking y search. Nombra esas dos banderas exactamente, porque la API aceptará cualquier otra cosa que envíes y la ignorará silenciosamente.

¿Listo para capturar respuestas de DeepSeek como datos?

Únete a nuestra comunidad para reclamar un plan gratuito y comparar notas con desarrolladores que construyen canalizaciones de respuestas de IA: Discord · Telegram.

Regístrate en app.scrapeless.com para recibir créditos de prueba gratuita y apunta scraper.deepseek a los mensajes y mercados que cubre tu programa de monitoreo.

FAQ

P: ¿Cómo autentico una solicitud de la API del scraper de DeepSeek?

Cada llamada lleva el encabezado x-api-token: <your key>, tanto en la solicitud de envío como en la de recogida. Una clave de cuenta cubre scraper.deepseek y cada otro actor de Scrapeless. Crea una clave en el plan gratuito en app.scrapeless.com.

P: ¿Por qué la solicitud devuelve un task_id en lugar de la respuesta?

El actor es asíncrono, por lo que un envío devuelve 201 con {"status": "pending", "task_id": "..."} y la respuesta llega de una segunda llamada a /api/v2/scraper/result/{task_id}. Ese endpoint devuelve 202 con {"status": "running"} hasta que la ejecución finaliza, luego 200 con el task_result completo. Los resultados completados se retienen durante cinco minutos; una URL de webhook es la alternativa al sondeo.

P: ¿Cómo obtengo la traza de razonamiento de DeepSeek?

Envía "thinking": true en la entrada. La respuesta entonces contiene un fragmento THINK cuyo content es el texto de razonamiento y cuyo elapsed_secs es el tiempo gastado en él. Sin esa bandera, el razonamiento no se genera y thinking_enabled regresa false.

P: ¿El scraper de DeepSeek devuelve fuentes y citas?

Sí, cuando envías "search": true. Las fuentes llegan como objetos con title, url, snippet, site_name, site_icon, published_at, query_indexes y cite_index, adjuntas al fragmento SEARCH o TOOL_SEARCH. Sin la bandera, no se recuperan fuentes y la respuesta se genera únicamente a partir del modelo.

P: ¿Por qué mi parámetro web_search no tiene efecto?

Porque ese es el nombre del parámetro del actor ChatGPT. La bandera de DeepSeek es search, y se aceptan claves desconocidas con un 201 y se descartan sin un error. Lo mismo se aplica a thinking_enabled, search_enabled y model — usa exactamente thinking y search.

P: ¿Qué campos están vacíos o son anulables?

model regresó como una cadena vacía en cada ejecución capturada para esta guía, feedback y incomplete_message son null en ejecuciones completadas, y references está vacío a menos que la ejecución usara ambas banderas. search_triggered permanece false cuando search no fue solicitado. Lee defensivamente y trata los campos ausentes como ausentes en lugar de como fallos.

P: ¿Puedo ejecutar esto sin un SDK?

Sí. Es HTTP simple — curl, Python requests, Node fetch, o cualquier cliente que pueda enviar un POST JSON y un GET con un encabezado.

P: ¿Es legal capturar respuestas de DeepSeek?

El actor captura contenido de respuesta generado públicamente, pero las reglas varían según la jurisdicción y los términos de servicio de la plataforma. Revisa los términos aplicables y consulta a un abogado para tu caso de uso, especialmente antes de redistribuir capturas, y no recojas datos personales protegidos bajo el GDPR o la CCPA. Cuando tu canalización pasa a buscar las URLs de origen que DeepSeek cita, respeta las directrices del rastreador estandarizadas por el Protocolo de Exclusión de Robots en cada uno de esos sitios también.

En Scrapeless, solo accedemos a datos disponibles públicamente y cumplimos estrictamente con las leyes, regulaciones y políticas de privacidad del sitio web aplicables. El contenido de este blog es sólo para fines de demostración y no implica ninguna actividad ilegal o infractora. No ofrecemos garantías y renunciamos a toda responsabilidad por el uso de la información de este blog o enlaces de terceros. Antes de realizar cualquier actividad de scraping, consulte a su asesor legal y revise los términos de servicio del sitio web de destino u obtenga los permisos necesarios.

Artículos más populares

Catalogar