Scraping con esquema
Le entrega un JSON Schema que describe exactamente la forma que necesita, campos obligatorios, tipos, enumeraciones, objetos anidados, y la página se lee contra ese contrato en vez de una lista de deseos vaga. Está pensado para el momento en que el dato raspado deja de ser una extracción puntual y pasa a alimentar una columna de base de datos, una respuesta de API o un sistema que rechazará cualquier cosa mal formada.
Ejecútela online
Ejecute esto en nuestros servidores con su cuenta. Las herramientas gratuitas corren en su navegador; esta cobra de su saldo del KIT según el precio de arriba.
Para datos que tienen que estar correctos, no solo presentes
Un campo que vuelve como texto cuando su base de datos espera un entero, o que falta por completo cuando su código asume que existe, es el tipo de error que aparece tres despliegues después, a las dos de la mañana. Este endpoint es para equipos a quienes ya les pasó eso y quieren que el propio paso de extracción haga cumplir el contrato, atrapando un resultado mal formado antes de que llegue a su sistema en vez de después.
Cómo el esquema moldea la extracción
Llama a POST /web/scrape-schema con una URL y un objeto JSON Schema, del tipo estándar, con tipos, arreglos de campos obligatorios, restricciones de enumeración y propiedades anidadas, y el task_id vuelve de inmediato. Internamente se descarga y lee la página, y la extracción se dirige a llenar exactamente la estructura que define su esquema; el resultado se valida contra ese mismo esquema antes de entregarse, así que lo que llega a su webhook está garantizado que coincide con el contrato que escribió, no solo que se le parece.
JSON Schema: una especificación hecha justo para este acuerdo
JSON Schema es la forma de facto para describir y validar la forma de un JSON desde mediados de la década de 2010, adoptada en herramientas de API, generadores de formularios y validadores precisamente porque permite que dos sistemas que nunca se conocieron acuerden un contrato sin que ninguno tenga que adivinar. Usarlo aquí significa que el esquema que ya mantiene para su base de datos o API se puede reutilizar tal cual para dirigir la extracción, en vez de escribir una segunda descripción informal de los mismos campos.
Cómo luce un resultado validado, y qué pasa si no coincide
Una tarea exitosa devuelve datos que cumplen su esquema sin rodeos: tipos correctos, todos los campos obligatorios presentes, valores de enumeración respetados. Si la página de origen realmente no puede aportar un campo requerido, la extracción se reintenta automáticamente hasta tres veces con lecturas nuevas antes de que la tarea devuelva un error claro explicando qué no se pudo satisfacer, y una tarea que nunca valida nunca se cobra.
Cómo encaja un contrato estricto en un sistema mayor
Este endpoint calza de forma natural con flujos donde el JSON extraído se inserta directo en una tabla de base de datos tipada, se reenvía a otra API con su propia validación, o lo consume código de aplicación fuertemente tipado, cualquier lugar donde un resultado de forma laxa haría fallar algo más adelante o exigiría una limpieza manual. Comparado con describir campos en lenguaje natural, escribir el esquema una vez al inicio cambia un poco de tiempo de configuración por resultados de extracción en los que puede confiar sin revisarlos de nuevo.
Qué puede hacer con ella
Poblar una tabla de base de datos tipada
Defina un esquema que coincida exactamente con las columnas de su tabla de productos, e inserte el JSON validado sin un paso de transformación intermedio.
Alimentar una API externa con su propia validación
Extraiga datos ya moldeados para coincidir con el payload requerido por una API de un socio, evitando solicitudes rechazadas por desajustes de tipo.
Forzar enumeraciones en campos categóricos
Restrinja un campo de estado a un conjunto fijo de valores como en_stock, poco_stock o agotado, para que la extracción nunca devuelva un texto inesperado.
Extraer datos anidados en varios niveles
Extraiga un producto con un arreglo anidado de variantes, cada una con su propio precio y talla, en una sola llamada que devuelve el árbol completo ya validado.
Preguntas frecuentes
¿Qué es JSON Schema y por qué lo necesita este endpoint?
JSON Schema es una forma estándar de describir la forma, los tipos y las restricciones de un dato JSON; entregar uno aquí permite validar la extracción contra él antes de entregarla, en vez de confiar en una suposición vaga.
¿Cuánto cuesta web.scrape_schema?
$0.046 por solicitud más $0.0145 por URL, y solo se cobra cuando la tarea devuelve datos que realmente validan contra su esquema.
¿Qué pasa si la página no puede satisfacer un campo obligatorio?
La extracción se reintenta automáticamente hasta tres veces, y si aun así no puede satisfacer el esquema recibe un error claro en lugar de un resultado parcial o mal formado, sin cobro por esa tarea.
¿Puedo reutilizar el mismo esquema que uso en mi base de datos o API?
Sí, cualquier JSON Schema estándar funciona, así que el contrato que ya mantiene en otro lugar se puede reutilizar directamente para dirigir la extracción.
¿Existe una versión gratuita de la api de scraping estructurado?
No hay capa gratuita: las capas gratis se abusan y ralentizan a todos. El acceso funciona con un saldo prepago de ForHosting KIT: se recarga desde $10.00 (no caduca) y cada solicitud se cobra a su precio publicado, así que una llamada sin saldo devuelve HTTP 402. Sin suscripción, sin tokens ni créditos inventados, y una tarea fallida no se cobra.
¿Soporta objetos y arreglos anidados en el esquema?
Sí, se soportan objetos anidados, arreglos y restricciones de enumeración, que es justo donde este endpoint supera a un mapa de selectores plano.
¿En qué se diferencia de scrape_ai?
scrape_ai acepta una descripción en lenguaje natural de los campos; scrape_schema exige y hace cumplir un JSON Schema formal, garantizando tipos y campos obligatorios en lugar de aproximarlos.
¿Cómo recibo los resultados?
Por webhook firmado cuando la tarea termina, o mediante un enlace firmado válido por 24 horas si prefiere consultarlo usted mismo.
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, y pronto desde nuestra app, el email y Telegram.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/web/scrape-schema \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"url":"https://ejemplo.com"}'const res = await fetch("https://api.kit.forhosting.com/web/scrape-schema", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"url": "https://ejemplo.com"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/web/scrape-schema",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"url": "https://ejemplo.com"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/web/scrape-schema", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"url":"https://ejemplo.com"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"url":"https://ejemplo.com"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/web/scrape-schema", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Ejemplo de solicitud
{
"url": "https://ejemplo.com"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "web.scrape_schema",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Límites
timeout_sec | 30 |
max_crawl_pages | 25 |
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |
422 | task_failed | La tarea falló tras 3 reintentos. No se cobra. |