Scraping de una web
Indique la dirección de una página y una lista breve que une nombres como precio o título con selectores CSS, y reciba justo esos valores, nombre por nombre: una coincidencia da un valor, varias dan una lista y ninguna da un resultado vacío. Paga por uso, sin suscripción.
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.
apunta a selectores CSS y recibe JSON
Señale los datos que ya conoce
Los selectores CSS describen la estructura de las páginas web desde la primera versión de CSS, en 1996, y los navegadores se pusieron de acuerdo hace mucho en cómo aplicarlos. Por eso siguen siendo la forma más rápida y barata de sacar un dato conocido de un diseño conocido. Usted indica la dirección de la página y una lista breve que une cada nombre que elija, como precio o título, con el selector que apunta a él. La página se abre, incluido el contenido que sus scripts añaden después de cargar, y el resultado reproduce su lista nombre por nombre.
Resultados previsibles que se pueden comprobar
A diferencia de las herramientas que interpretan la página, un selector coincide o no coincide: no hay ambigüedad ni valores inventados. Si encuentra un elemento, devuelve su valor; si encuentra varios, una lista, como las filas de una tabla; y si no encuentra nada, un resultado vacío que se detecta al instante. Por eso encaja en tareas repetidas sobre diseños estables, como sacar dirección, precio, superficie y número de fotos de miles de anuncios inmobiliarios con una sola lista de selectores, o revisar cada mañana una página de empleo para ver vacantes nuevas antes de que exista un feed público.
Pensado para quien ya conoce sus selectores
Sirve para monitores de precios, seguimiento de inventario, extracción de anuncios inmobiliarios, vigilancia de bolsas de empleo y cualquier tarea recurrente donde el diseño de la página objetivo sea conocido y razonablemente estable. Define un mapa de selectores una sola vez, nombre de campo a selector CSS, y cada solicitud contra ese mismo tipo de página lo reutiliza.
Selectores CSS: una idea vieja que sigue ganando
Los selectores describen la estructura de un documento desde CSS1 en 1996, y los navegadores estandarizaron la coincidencia tipo querySelector hace décadas, lo cual explica por qué siguen siendo la forma más rápida y barata de extraer un campo conocido de un diseño conocido. A diferencia de un modelo de visión o de lenguaje, un selector coincide o no coincide: cero ambigüedad, cero campos inventados y un resultado que puede probar con un test unitario.
Qué puede hacer con ella
Agregación de anuncios inmobiliarios
Extraiga dirección, precio, metros cuadrados y número de fotos de un sitio de listados usando un único mapa de selectores reutilizado en miles de páginas.
Vigilancia de bolsas de empleo
Extraiga los selectores de título, empresa y fecha de publicación de una página de vacantes cada mañana para detectar nuevas ofertas antes de que exista un feed público.
Preguntas frecuentes
¿La api de web scraping es gratis para probar?
No hay capa gratuita: las capas gratis se abusan y ralentizan a todos. Sin suscripción, sin tokens ni créditos inventados, y una tarea fallida no se cobra.
¿Funciona con páginas renderizadas en JavaScript?
Sí, la capa de descarga renderiza la página antes de aplicar sus selectores CSS, así que el contenido inyectado por scripts del cliente se puede seleccionar igual que el HTML estático.
¿Qué pasa si mi selector no coincide con nada?
Ese campo vuelve como null en la respuesta en lugar de hacer fallar toda la tarea, así que un selector roto dentro del mapa no bloquea el resto de sus datos.
¿Qué pasa si un scraping falla?
Los intentos fallidos se reintentan automáticamente hasta tres veces; si aun así falla recibe un error claro y nunca se le cobra esa tarea.
¿Qué ocurre si un selector no encuentra nada o encuentra varios elementos?
Si encuentra uno, recibe su valor; si encuentra varios, recibe una lista, como las filas de una tabla; y si no encuentra nada, ese nombre llega vacío. Así ve enseguida qué selector hay que corregir tras un cambio en el sitio.
¿Cuánto tiempo se guardan los resultados?
El resultado terminado espera en un enlace seguro que funciona durante 24 horas; después, los datos se borran. Nunca se usan para entrenar ningún modelo.
Herramientas relacionadas
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, por email y desde Telegram — y pronto también desde nuestra app.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/web/scrape-selector \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com","selectors":{"titulo":"h1","parrafos":"p"}}'const res = await fetch("https://api.kit.forhosting.com/web/scrape-selector", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"url": "https://example.com",
"selectors": {
"titulo": "h1",
"parrafos": "p"
}
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/web/scrape-selector",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"url": "https://example.com",
"selectors": {
"titulo": "h1",
"parrafos": "p"
}
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/web/scrape-selector", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"url":"https://example.com","selectors":{"titulo":"h1","parrafos":"p"}}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"url":"https://example.com","selectors":{"titulo":"h1","parrafos":"p"}}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/web/scrape-selector", 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://example.com",
"selectors": {
"titulo": "h1",
"parrafos": "p"
}
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "web.scrape_selector",
"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. |
Notas técnicas
Le da una URL y un mapa de selectores CSS, y le devuelve exactamente los campos que pidió en JSON estructurado, sin navegador headless que vigilar ni HTML que parsear por su cuenta. Es el endpoint de trabajo para equipos que ya saben con precisión en qué div, span o celda de tabla vive el dato que necesitan.
Pensado para quien ya conoce sus selectores
Si sabe abrir las herramientas de desarrollador, hacer clic derecho sobre un elemento y copiar su selector, este endpoint es para usted.
Qué ocurre después de enviar una solicitud
La llamada a POST /web/scrape-selector devuelve un task_id de inmediato; la descarga y extracción reales corren de forma asíncrona sobre nuestro edge global, incluyendo páginas renderizadas con JavaScript cuando el selector apunta a contenido inyectado del lado del cliente. Al terminar la tarea, el resultado llega a su webhook firmado o queda disponible en un enlace firmado válido durante 24 horas, después de lo cual el dato se elimina y nunca se usa para entrenar modelos.
Qué recibe de vuelta y qué pasa cuando un selector falla
La respuesta refleja su mapa de selectores campo por campo, con arreglos para elementos repetidos como filas de tabla o ítems de lista, y null para un selector que no encontró nada en esa página en particular.
Dónde encaja dentro de un flujo mayor
La mayoría de los equipos encadenan este endpoint detrás de un programador de tareas: disparan un lote de URLs por cron, dejan que cada tarea llegue a un webhook y alimentan el JSON directo a una base de datos, hoja de cálculo o regla de alerta sin que nadie abra la página de origen. Como el precio es una base fija por solicitud más una pequeña tarifa por URL, escala de forma predecible ya sea que vigile cinco precios de la competencia o cinco mil referencias de producto.
Casos de integración
Monitoreo de precios de la competencia
Rastree los selectores .price y .stock-status en un conjunto de páginas de producto rivales cada día y alimente el JSON a un panel de precios.
Recolección de datos en tablas
Apunte a un selector de fila de tabla para convertir una tabla HTML de tipos de cambio o especificaciones en un arreglo JSON que su aplicación puede indexar directamente.
Preguntas técnicas
¿Cuánto cuesta web.scrape_selector?
$0.040 por solicitud más $0.001 por URL procesada, y solo se cobra cuando la tarea realmente se completa.
¿Puedo extraer varias URLs con un solo mapa de selectores?
Sí, envíe una lista de URLs junto con un único mapa de selectores cuando las páginas comparten el mismo diseño, que es la forma más eficiente de usar este endpoint.
¿Cómo recibo los resultados?
Por envío a su webhook firmado cuando la tarea termina, o mediante un enlace firmado válido por 24 horas si prefiere consultarlo usted mismo.
¿En qué se diferencia de los endpoints de scraping con IA o con esquema?
El scraping por selectores es la opción más rápida y económica cuando ya conoce la ruta CSS exacta de cada campo; los endpoints con IA y con esquema existen para cuando el diseño varía o necesita tipos de dato garantizados.