DeepSeek Web Scraping: Convierte HTML de Table-Soup en JSON limpio
Scraping and Proxy Management Expert
TL;DR:
- DeepSeek es el motor de extracción económico, y se gana el título en marcado desordenado. Una ejecución en vivo en esta guía extrajo 10 registros estructurados — texto, autor, lista de etiquetas — de una página con tablas anidadas para 3,397 tokens con un modelo que cuesta menos de una décima por millón de tokens de entrada.
- La API está a un cambio de
base_url. El punto final de DeepSeek es compatible con OpenAI: el SDK oficial de OpenAI en Python apuntando ahttps://api.deepseek.comcon el modo JSON activado es toda la integración. - Los nombres de los modelos se han movido recientemente: la mayoría de los tutoriales están desactualizados. Los modelos actuales son
deepseek-v4-flashydeepseek-v4-pro; los nombres familiarmente largosdeepseek-chatydeepseek-reasonerestán obsoletos desde el 24 de julio de 2026. - El modelo aún no puede recuperar. Renderizar, las sesiones y los desafíos de acceso pertenecen a una capa de recuperación; la de esta guía es un POST por página a través de la API de Scraping Universal de Scrapeless.
- ¿No tienes clave de DeepSeek aún? La solicitud idéntica se ejecuta a través de OpenRouter. Esta guía lo ejecutó en vivo en
deepseek/deepseek-v4-flashy muestra la salida capturada. - Gratis para comenzar en el lado de recuperación. Crea tu clave de API de Scrapeless en app.scrapeless.com.
¿Puede DeepSeek raspar sitios web?
DeepSeek lee páginas; no las recupera. La API toma texto que ya has recuperado y devuelve los campos que nombras — y debido a que su precio por token está en la parte baja del mercado, es el modelo que la gente elige cuando la extracción debe hacerse a través de muchas páginas. Recuperar esas páginas, renderizar su JavaScript y sobrevivir a sus controles de acceso es una capa separada que ningún punto final de completaciones de chat proporciona.
Donde DeepSeek brilla es en el marcado que menos querrías analizar a mano. HTML semántico es amable con los selectores; las páginas reales a menudo no lo son. El objetivo de demostración en esta guía es una página de citas renderizada completamente como tablas anidadas — sin clases en las celdas de datos, texto de cita, autores y etiquetas intercaladas fila por fila — el tipo de estructura donde la lógica del selector se convierte en aritmética de conteo de filas que muere en el siguiente rediseño. A un modelo de lenguaje no le importa: lee la tabla de la misma manera que lo hace una persona.
El plan: recuperar la página de sopa de tablas una vez con una capa de recuperación controlada, luego hacer que DeepSeek devuelva JSON limpio. Si tu interés es la categoría de herramienta más amplia, el explicador de raspadores LLM y la lista clasificada de raspadores LLM mapean el campo.
Instalar
Un SDK cubre tanto la ruta nativa como la ruta del agregador, además de requests para recuperar:
bash
pip install "openai==2.34.0" requests
Configurar
bash
export DEEPSEEK_API_KEY="sk-your_deepseek_key"
export SCRAPELESS_API_KEY="sk_your_scrapeless_key"
Recuperar la página que nadie quiere analizar
El objetivo es un rendering basado en tablas de un sitio de citas público construido para practicar scraping. Un POST a la API de Raspado Universal la devuelve con la renderización y desbloqueo manejados del lado del servidor:
python
# fetch_tableful.py — recuperar la página de sopa de tablas a través de Scrapeless
import os
import requests
resp = requests.post(
"https://api.scrapeless.com/api/v1/unlocker/request",
headers={
"Content-Type": "application/json",
"x-api-token": os.environ["SCRAPELESS_API_KEY"],
},
json={
"actor": "unlocker.webunlocker",
"input": {"url": "https://quotes.toscrape.com/tableful/", "method": "GET"},
},
timeout=120,
)
resp.raise_for_status()
html = resp.json().get("data", "")
print(f"recuperados {len(html):,} caracteres")
print("elementos de tabla:", html.count("<table"), "| filas de tabla:", html.count("<tr"))
with open("page.html", "w", encoding="utf-8") as f:
f.write(html)
La ejecución imprime una <table> y 22 filas <tr> para lo que son conceptualmente diez registros con etiquetas — filas de citas y filas de etiquetas intercaladas, exactamente la forma que la especificación de tablas HTML permite y los autores de selectores temen.
Implementación básica: DeepSeek como el extractor
La integración es el SDK de OpenAI con dos valores específicos de DeepSeek: la URL base y el nombre del modelo. El modo JSON (response_format={"type": "json_object"}) y temperature=0 hacen que la salida sea analizable y estable; los parámetros están documentados en la referencia de la API de DeepSeek. Utiliza los nombres de modelo actuales: deepseek-v4-flash para trabajos de extracción, deepseek-v4-pro cuando realmente necesitas un modelo más; los nombres más antiguos deepseek-chat y deepseek-reasoner están en desuso desde el 24 de julio de 2026.
Nota: Este bloque necesita un
DEEPSEEK_API_KEYcon crédito; el único requisito previo que esta guía no asume. La siguiente sección ejecuta la extracción idéntica en vivo a través de OpenRouter, con salida capturada.
python
# extract_deepseek.py — extracción nativa de DeepSeek (requiere DEEPSEEK_API_KEY)
import json
import os
from openai import OpenAI
client = OpenAI(
base_url="https://api.deepseek.com",
api_key=os.environ["DEEPSEEK_API_KEY"],
)
page_html = open("page.html", encoding="utf-8").read()
completion = client.chat.completions.create(
model="deepseek-v4-flash",
temperature=0,
response_format={"type": "json_object"},
messages=[
{
"role": "system",
"content": 'Extrae cada cita de esta página basada en tablas. Responde ÚNICAMENTE con JSON: '
'{"quotes":[{"text":str,"author":str,"tags":[str]}]}.',
},
{"role": "user", "content": page_html},
],
)
data = json.loads(completion.choices[0].message.content)
print(f"extraído {len(data['quotes'])} citas de la marca de la tabla")
Sin aritmética de filas, sin XPath de ejes hermanos: el esquema nombra la salida y el modelo lee.
¿No tienes clave de DeepSeek? Ejecútalo a través de OpenRouter
Debido a que ambas interfaces son de forma OpenAI, la variante del agregador difiere en dos cadenas. Esta es la versión que esta guía ejecutó en realidad, recuperación y extracción en un solo script autónomo:
python
# extract_openrouter.py — la misma extracción, ejecutada a través de OpenRouter
import json
import os
import requests
from openai import OpenAI
resp = requests.post(
"https://api.scrapeless.com/api/v1/unlocker/request",
headers={
"Content-Type": "application/json",
"x-api-token": os.environ["SCRAPELESS_API_KEY"],
},
json={
"actor": "unlocker.webunlocker",
"input": {"url": "https://quotes.toscrape.com/tableful/", "method": "GET"},
},
timeout=120,
)
resp.raise_for_status()
page_html = resp.json().get("data", "")
client = OpenAI(
base_url="https://openrouter.ai/api/v1",
api_key=os.environ["OPENROUTER_API_KEY"],
)
completion = client.chat.completions.create(
model="deepseek/deepseek-v4-flash",
temperature=0,
response_format={"type": "json_object"},
messages=[
{
"role": "system",
"content": 'Extrae cada cita de esta página basada en tablas. Responde ÚNICAMENTE con JSON: '
'{"quotes":[{"text":str,"author":str,"tags":[str]}]}.',
},
{"role": "user", "content": page_html},
],
)
data = json.loads(completion.choices[0].message.content)
print(f"extraído {len(data['quotes'])} citas de la marca de la tabla")
print(json.dumps(data["quotes"][0], ensure_ascii=False))
La ejecución en vivo extrajo todos los 10 registros de la sopa de la tabla, el primero:
text
extraído 10 citas de la marca de la tabla
{"text": "El mundo tal como lo hemos creado es un proceso de nuestro pensamiento. No puede cambiarse sin cambiar nuestro pensamiento.", "author": "Albert Einstein", "tags": ["cambio", "profundas-reflexiones", "pensamiento", "mundo"]}
Las etiquetas regresaron como arreglos a pesar de que la página las renderiza en una fila separada de la cita misma; el modelo asoció cada fila de etiquetas con la fila de cita encima de ella, que es precisamente el enlace que un script de selección tiene que codificar a mano. La llamada completa: 3,397 tokens.
Obtén tu clave API en el plan gratuito: app.scrapeless.com
Patrones avanzados
- Reserva el modelo para páginas que lo merezcan. DeepSeek es barato por token, y un script de selección sigue siendo más barato: gratuito. Dirige diseños limpios y estables a un código de selector generado y revisado y gasta llamadas al modelo en la sopa de tablas, lo susceptible al rediseño y la cola larga.
- Indica la semántica de la fila cuando las conozcas. En esta página, el aviso no lo necesitaba, pero en tablas más problemáticas una frase — "cada registro abarca dos filas: datos, luego etiquetas" — compra precisión más barato que un modelo más grande.
- Mantén una página por llamada y bucla en Python. Los límites de página son límites de registro; el agrupamiento en el lado del aviso los difumina.
- Observa el calendario de desuso. Los nombres de modelo fijados envejecen.
deepseek-chatsirvió durante mucho tiempo y se detiene el 24 de julio de 2026; pon los ids de modelo en la configuración, no en diez scripts.
Solución de problemas
model_not_foundo similar en el punto final nativo. Probablemente estés enviando un nombre de modelo obsoleto; cambia adeepseek-v4-flashodeepseek-v4-pro.- Prosa en lugar de JSON. El modo JSON está apagado — establece
response_format={"type": "json_object"}y mantiene el esquema en el mensaje del sistema. - Fusión de registros o etiquetas que caen en la cita equivocada. Agrega la frase de semánticas de fila al mensaje del sistema y verifica que el HTML obtenido contenga realmente las filas que esperas, como las cuenta el script de obtención.
- La salida varía entre ejecuciones.
temperature=0. La extracción es una tarea de transcripción, no una tarea de escritura.
Conclusión
El caso de DeepSeek para la capa de extracción es aritmética más tolerancia: precios de tokens al nivel del mercado y sin miedo al markup que castiga la lógica del selector. La demostración de tabla-sopa es la prueba — 10 registros con arreglos de etiquetas correctamente unidos de filas anónimas <tr>, por 3,397 tokens. Lo que el modelo no puede suministrar es la página misma, renderizada y accesible; una solicitud POST del lado del servidor por página cubre ese lado, y las dos capas juntas forman un scraper que cuesta casi nada de ejecutar y poco de mantener cuando se desplaza el markup.
¿Listo para alimentar a DeepSeek con páginas reales?
La capa de obtención aquí es la API de Raspado Universal — los planes y volúmenes de solicitud están en la página de precios, con cada parámetro unlocker.webunlocker en la documentación para desarrolladores. Crea una clave en el plan gratuito en app.scrapeless.com y ambos scripts se ejecutarán como están escritos.
Preguntas Frecuentes
P: ¿Puede DeepSeek raspar sitios web por sí mismo?
No. La API de DeepSeek es un punto final de modelo de lenguaje: extrae del texto que proporcionas y no puede emitir solicitudes, renderizar JavaScript o mantener sesiones. Cada configuración de raspado que funcione con DeepSeek la empareja con una capa de obtención que devuelve contenido de página fiel.
P: ¿Qué modelo de DeepSeek debo usar para el raspado web?
deepseek-v4-flash para la extracción — la ejecución en vivo en esta guía lo utilizó y devolvió los 10 registros con uniones de etiquetas correctas. Usa deepseek-v4-pro solo cuando la entrada limpia aún produzca campos incorrectos. Evita los nombres obsoletos deepseek-chat y deepseek-reasoner en nuevo código.
P: ¿Por qué usar DeepSeek en lugar de un modelo de nombre más grande para la extracción?
Precio con igual adecuación. La extracción restringida por esquema a temperature=0 es una tarea limitada que la mayoría de los modelos actuales superan; cuando todos pasan, el modelo más barato que pase gana. La ejecución medida aquí costó 3,397 tokens en un modelo con un precio inferior a diez centavos por millón de tokens de entrada — a esa tasa, la extracción deja de ser la parte cara del pipeline.
P: ¿Cuándo es un script de selector aún mejor que DeepSeek?
Cuando el diseño es limpio, estable y de alto volumen. Un script de selector revisado no cuesta nada por página para siempre; una llamada a un modelo cuesta tokens cada vez. La división operativa: selectores para el núcleo estable de tus objetivos, DeepSeek para markup enredado y diseños que siguen cambiando.
P: ¿Es legal el raspado con DeepSeek?
El modelo de extracción no cambia las reglas de recolección. Obtén solo páginas públicas, respeta los términos del sitio y las directrices de robots estandarizadas por el Protocolo de Exclusión de Robots, mantén los volúmenes limitados y maneja cualquier dato personal bajo la ley aplicable — además de los términos de uso de DeepSeek del lado del modelo.
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.



