extract_content
Descargue una página, descarte la envoltura y obtenga lo que realmente contiene. Se eliminan la navegación, las cabeceras, los pies, las barras laterales, los scripts, los estilos y los contenedores de anuncios; después se localiza el cuerpo del artículo y se devuelve como texto limpio o como HTML, junto con el título, la autoría y la fecha de publicación que declara la página.
Casos de uso
Ingesta para RAG
Convierta un artículo en texto limpio antes de dividirlo en fragmentos y generar embeddings, sin que el menú de navegación contamine cada fragmento.
Vistas de lectura
Muestre una versión sin distracciones de una página, conservando la estructura HTML poniendo clean_html en false.
Extracción de la autoría
Recopile el autor y la fecha de publicación de las propias metaetiquetas de la página para atribución o comprobaciones de actualidad.
Recolección de imágenes
Obtenga cada imagen del artículo como URL absoluta, ya resuelta respecto a la dirección de la propia página.
Grafos de citas
Active include_links para capturar los enlaces salientes dentro del cuerpo del artículo, no los de la navegación del sitio.
Migración de contenido
Extraiga el HTML del artículo de un sitio antiguo y cárguelo en otro lugar, sin arrastrar la plantilla antigua.
Endpoint
/api/v1/tools/extract_contentParameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
url | string | Required | - | La página de la que se extraerá. Debe ser una URL http o https absoluta y válida. Example: https://example.com/blog/crawl-budgets |
include_images | boolean | Optional | true | Devuelve cada `<img>` dentro de la región extraída como URL absoluta, además de `image_count`. Se omiten las fuentes que no se pueden resolver respecto a la URL de la página. Si lo pone en false, ambas claves desaparecen. Example: true |
include_links | boolean | Optional | false | Devuelve cada `<a href>` dentro de la región extraída como `{ href, text }` con hrefs absolutos, además de `link_count`. Desactivado por defecto: al activarlo aparecen ambas claves. Example: true |
clean_html | boolean | Optional | true | True devuelve texto plano con los espacios colapsados y pone `content_type` en `text`. False devuelve el HTML interno de la región y pone `content_type` en `html`, igualmente sin los elementos repetitivos. Example: true |
extract_main_content | boolean | Optional | true | Acota al cuerpo del artículo probando `<article>`, luego `<main>`, luego `.content`, luego `#content`, y recurriendo a `<body>` cuando ninguno coincide. Póngalo en false para conservar todo el body. Example: true |
timeout | number | Optional | 10000 | Tiempo de espera de la descarga en milisegundos, entre 1000 y 30000. Example: 10000 |
respect_robots | boolean | Optional | true | Respeta el robots.txt del sitio de destino. Con el valor `true`, una ruta que robots.txt no permita a `CrawlForge` se rechaza con un 403 antes de descargar nada y no se cobran credits. Póngalo en `false` solo para destinos con los que tenga su propio acuerdo: la respuesta incluye entonces una entrada `warnings` y la anulación queda registrada en su API key. Example: true |
Ejemplos de solicitud
curl -X POST https://crawlforge.dev/api/v1/tools/extract_content \
-H "X-API-Key: cf_test_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/blog/crawl-budgets",
"include_links": true
}'Ejemplo de respuesta
{ "success": true, "data": { "url": "https://example.com/blog/crawl-budgets", "content": "Why crawl budgets matter Search engines allocate a finite number of requests to each site. See the sitemap guide for the mechanics.", "content_length": 131, "content_type": "text", "title": "Why crawl budgets matter — Acme Blog", "author": "Dana Reyes", "publish_date": "2026-08-14T09:30:00Z", "images": [ "https://example.com/img/crawl-budget.png" ], "image_count": 1, "links": [ { "href": "https://example.com/docs/sitemaps", "text": "sitemap guide" } ], "link_count": 1 }, "credits_used": 2, "credits_remaining": 998, "processing_time": 680}data.contentLa región extraída. Texto plano con los espacios colapsados, o HTML interno cuando `clean_html` es falsedata.content_lengthNúmero de caracteres de `content`: un valor bajo suele indicar que la página se renderiza en el clientedata.content_type`text` o `html`, reflejando `clean_html`data.titleEl elemento `<title>` de toda la página, no un encabezado dentro del artículodata.authorDe la etiqueta `meta[name=author]` de la página. `null` cuando la página no declara ningunadata.publish_dateDe `meta[property=article:published_time]`, devuelto tal cual. `null` cuando no existedata.imagesURL absolutas, resueltas respecto a la dirección de la página. Aparece cuando `include_images` es truedata.linksSolo los enlaces dentro de la región extraída. Aparece cuando `include_links` es truecredits_used2 credits fijos por páginaManejo de errores
URL no válida (400 Bad Request)
VALIDATION_ERROR. url es obligatorio y debe analizarse como una URL absoluta. El mismo estado cubre un timeout fuera de 1000-30000.
Página demasiado grande (413 Payload Too Large)
RESPONSE_TOO_LARGE. La página superó el límite de lectura de 25MB y se rechazó en lugar de almacenarse en memoria.
El destino agotó el tiempo de espera (504 Gateway Timeout)
FETCH_TIMEOUT. La página dejó de responder mientras enviaba su cuerpo. Aumente timeout, hasta 30000 ms.
Fallo en la descarga (502 Bad Gateway)
FETCH_FAILED. No se pudo leer el cuerpo de la respuesta: conexión reiniciada, o un cuerpo que no es texto decodificable.
La extracción falló (500 Internal Server Error)
TOOL_ERROR. Una llamada fallida no se cobra; los credits solo se descuentan después de que la extracción tiene éxito.
Bloqueado por robots.txt (403 Forbidden)
El robots.txt del sitio de destino no permite esta ruta a CrawlForge. Establezca respect_robots: false para anularlo si tiene su propio acuerdo con el destino: la anulación queda registrada en su API key. La anulación no alcanza a un host incluido en la lista de exclusión permanente de CrawlForge, que se rechaza sea cual sea el valor de respect_robots.
content corto en lugar de un error. Si content_length vuelve casi en cero para una página que sí ve en el navegador, use scrape_with_actions en su lugar.Costo en credits
Qué incluye:
Eliminación de elementos repetitivos (nav, header, footer, aside, anuncios, scripts, estilos)
Detección del contenido principal con <body> como alternativa
Texto limpio o HTML del artículo
Título, autor y fecha de publicación de las metaetiquetas de la página
URL absolutas de imágenes y enlaces del interior del artículo
Recomendaciones por plan:
Plan Free: 1,000 credits de prueba por única vez = 500 páginas
Plan Hobby: 5,000 credits = 2,500 páginas ($19/mo)
Plan Professional: 50,000 credits = 25,000 páginas ($99/mo)