AnyCrawl te ayuda a convertir páginas web desordenadas en Markdown o JSON limpio para aplicaciones de LLM. Este tutorial muestra cómo emparejar AnyCrawl con Atlas Cloud como fuente de API de modelos, extraer datos de una página de proyecto, obtener campos estructurados y luego escalar el mismo patrón para flujos de trabajo de rastreo (crawl) y búsqueda (search).
La mayoría de los tutoriales de web scraping terminan en "descargar el HTML". Para las aplicaciones de IA, ahí es donde empieza el trabajo real. Las páginas sin procesar incluyen encabezados, pies de página, barras laterales, banners de cookies, enlaces repetidos y contenido renderizado por JavaScript. Lo que tu modelo realmente necesita es una interfaz de datos estable: texto limpio cuando buscas contexto y JSON tipado cuando necesitas campos específicos.
Ese es el modelo mental útil para AnyCrawl. Es un crawler y scraper de Node.js / TypeScript diseñado para convertir sitios web en datos listos para LLM, con soporte para scraping de una sola página, rastreo de sitios, recolección de SERP, cargas de trabajo multihilo/multiproceso y extracción de JSON impulsada por IA.
Lo que vamos a construir
Crearemos un pequeño "extractor de investigación de proyectos".
Entrada:
plaintext1La URL de una página pública de un proyecto o documentación
Salida:
plaintext1{ 2 "project_name": "AnyCrawl", 3 "one_sentence_summary": "...", 4 "core_features": ["..."], 5 "best_for": ["..."], 6 "input_types": ["url", "search query"], 7 "output_formats": ["markdown", "json"], 8 "evidence_urls": ["..."] 9}
La demostración utiliza tres características de AnyCrawl:
td {white-space:nowrap;border:0.5pt solid #dee0e3;font-size:10pt;font-style:normal;font-weight:normal;vertical-align:middle;word-break:normal;word-wrap:normal;}
| Necesidad | Característica | Por qué importa |
| Extraer una página | /v1/scrape | El mejor punto de partida para convertir una URL a Markdown o JSON |
| Extraer muchas | /v1/crawl | Útil para sitios de docs, páginas de productos, blogs y ayuda |
| Encontrar páginas | /v1/search | Útil cuando necesitas resultados de SERP antes de scrapear URLs |
| Forzar campos estables | Modo JSON | Útil cuando tu app requiere salida tipada, no solo texto plano |
La API de Scrape de AnyCrawl convierte una URL en datos estructurados listos para LLM y puede devolver Markdown, HTML, texto, capturas de pantalla, HTML crudo, JSON, resúmenes y enlaces. Los documentos describen Scrape como sincrónico, por lo que no necesitas un bucle de sondeo (polling) para una sola página.
Paso a paso: Ejecutar AnyCrawl con Atlas Cloud y extraer páginas web a JSON
En este tutorial, autoalojaremos AnyCrawl con Docker, estableceremos a Atlas Cloud como el proveedor de API de modelos para la extracción y luego llamaremos al servidor local de AnyCrawl para convertir una página web en JSON estructurado.
Nota: Este tutorial está escrito para entornos de terminal en macOS y Linux.
Paso 1: Crear una carpeta de proyecto limpia
Abre tu terminal y crea una pequeña carpeta para esta demo.
plaintext1mkdir anycrawl-atlas-demo 2cd anycrawl-atlas-demo
Esta carpeta solo contendrá el archivo de entorno y el cuerpo de la solicitud que usaremos para probar la API.
Paso 2: Obtener una clave de API de Atlas Cloud
Ve a la consola de Atlas Cloud, abre la página de API Keys, haz clic en Create API Key, luego copia y guarda la clave de forma segura. Atlas Cloud indica que la clave solo se muestra una vez, así que guárdala en un lugar seguro al crearla.

Mantén la clave privada. No la pegues en un repositorio público de GitHub, borradores de artículos públicos o capturas de pantalla.
Paso 3: Crear el archivo .env
Crea un archivo .env en la carpeta actual:
plaintext1cat > .env <<'EOF' 2NODE_ENV=production 3ANYCRAWL_API_PORT=8080 4ANYCRAWL_HEADLESS=true 5ANYCRAWL_API_AUTH_ENABLED=false 6 7ATLASCLOUD_BASE_URL=https://api.atlascloud.ai/v1 8ATLASCLOUD_API_KEY=TU_CLAVE_DE_ATLASCLOUD 9DEFAULT_LLM_MODEL=atlascloud/deepseek-v4 10DEFAULT_EXTRACT_MODEL=atlascloud/deepseek-v4 11EOF
Reemplaza TU_CLAVE_DE_ATLASCLOUD con tu clave real.
Este es el lugar correcto para configurar el proveedor del modelo. La solicitud de scraping en sí misma debe centrarse en la URL, el formato de salida y el esquema JSON. El enrutamiento del modelo pertenece al entorno del servidor AnyCrawl, ya que AnyCrawl es el servicio que ejecuta el paso de extracción potenciado por LLM.
Paso 4: Iniciar AnyCrawl con Docker
Nota: En macOS, asegúrate de que Docker Desktop esté instalado y ejecutándose antes de iniciar AnyCrawl. Para Macs con Apple Silicon, usa auto o playwright en lugar de puppeteer a menos que ejecutes explícitamente la imagen amd64.
Ejecuta el contenedor todo en uno de AnyCrawl y monta el archivo .env en él.
plaintext1docker run -d \ 2 --name anycrawl-atlas-demo \ 3 -p 8080:8080 \ 4 -v "$(pwd)/.env:/usr/src/app/.env:ro" \ 5 ghcr.io/any4ai/anycrawl:latest
Verifica si el servicio se está ejecutando:
plaintext1curl http://localhost:8080/health
Los documentos de Docker usan el puerto 8080 para despliegue local y muestran /health como el endpoint de verificación.
Paso 5: Probar primero una solicitud de scrape básica
Antes de pedir JSON, prueba si AnyCrawl puede leer una página y devolver Markdown.
plaintext1curl -X POST "http://localhost:8080/v1/scrape" \ 2 -H "Content-Type: application/json" \ 3 -d '{ 4 "url": "https://github.com/any4ai/AnyCrawl", 5 "engine": "auto", 6 "formats": ["markdown"], 7 "only_main_content": true 8 }'
La API de Scrape de AnyCrawl convierte una URL en datos estructurados listos para LLM. Admite motores como auto, cheerio, playwright y puppeteer, y formatos de salida que incluyen markdown, html, text, json, summary y links.
Para esta primera solicitud, markdown es suficiente. Estás verificando si el contenido de la página es visible antes de pedirle al modelo que extraiga campos estructurados.
Paso 6: Crear la solicitud de extracción JSON
Ahora crea un cuerpo de solicitud que le pida a AnyCrawl que extraiga un perfil de proyecto estructurado.
plaintext1cat > scrape-project.json <<'EOF' 2{ 3 "url": "https://github.com/any4ai/AnyCrawl", 4 "engine": "auto", 5 "formats": ["markdown", "json"], 6 "only_main_content": true, 7 "extract_source": "markdown", 8 "json_options": { 9 "schema_name": "open_source_project_profile", 10 "schema_description": "Un perfil estructurado de un proyecto de código abierto basado solo en el contenido visible de la página.", 11 "schema": { 12 "type": "object", 13 "properties": { 14 "project_name": { 15 "type": "string" 16 }, 17 "one_sentence_summary": { 18 "type": "string" 19 }, 20 "core_features": { 21 "type": "array", 22 "items": { 23 "type": "string" 24 } 25 }, 26 "best_for": { 27 "type": "array", 28 "items": { 29 "type": "string" 30 } 31 }, 32 "supported_tasks": { 33 "type": "array", 34 "items": { 35 "type": "string" 36 } 37 }, 38 "developer_setup_notes": { 39 "type": "array", 40 "items": { 41 "type": "string" 42 } 43 } 44 }, 45 "required": [ 46 "project_name", 47 "one_sentence_summary", 48 "core_features" 49 ] 50 }, 51 "user_prompt": "Extrae solo hechos visibles en la página. No adivines. Resume el proyecto para un desarrollador que quiere usar datos web en una aplicación de IA." 52 } 53} 54EOF
Hay un error común aquí: al usar json_options, debes incluir "json" en formats; de lo contrario, la respuesta no contendrá los datos JSON extraídos. El modo JSON de AnyCrawl admite extracción solo por prompt, solo por esquema, o ambos. En este tutorial, usamos prompt más esquema porque permite control de campos y guía de extracción.
Paso 7: Ejecutar la extracción JSON
Envía la solicitud a tu servidor local de AnyCrawl:
plaintext1curl -X POST "http://localhost:8080/v1/scrape" \ 2 -H "Content-Type: application/json" \ 3 -d @scrape-project.json
Si todo está configurado correctamente, la respuesta debería incluir un resultado de scrape exitoso y un resultado de extracción JSON siguiendo el esquema que definiste.
En este punto, el flujo está completo:
plaintext1Página de proyecto de GitHub 2→ API de scrape local de AnyCrawl 3→ Extracción de Markdown 4→ Extracción de JSON con LLM 5→ Perfil de proyecto estructurado
Lo importante es que la solicitud nunca llama directamente al proveedor del modelo. AnyCrawl maneja el flujo de trabajo de scraping y extracción, mientras que la fuente de la API del modelo ya está configurada a nivel de servidor.
Paso 8: Probar una página cargada de JavaScript si el Markdown parece vacío
Si el resultado en Markdown es demasiado corto, está vacío o falta contenido visible, cambia el motor a playwright.
plaintext1{ 2 "url": "https://example.com", 3 "engine": "playwright", 4 "formats": ["markdown", "json"], 5 "only_main_content": true, 6 "json_options": { 7 "user_prompt": "Extrae el tema principal, hechos clave y enlaces importantes de esta página." 8 } 9}
Los documentos de AnyCrawl describen cheerio como rápido para HTML estático, playwright como mejor para páginas renderizadas con JavaScript y auto como la opción de propósito general que puede elegir el motor automáticamente.
Paso 9: Detener y limpiar el contenedor de demostración
Cuando termines de probar, detén el contenedor:
plaintext1docker stop anycrawl-atlas-demo 2docker rm anycrawl-atlas-demo
Puedes reiniciar el mismo flujo de trabajo más tarde ejecutando el comando de Docker nuevamente desde la carpeta que contiene tu archivo .env.
Lo que acabas de construir
Ahora tienes un servicio local de AnyCrawl que puede scrapear una página web pública, limpiarla a Markdown y extraer JSON tipado a través de un flujo de LLM guiado por esquema. La configuración mantiene el crawler, el modelo de extracción y la salida de la aplicación en el orden correcto: página web primero, contenido estructurado después, integración en la app al final.
Preguntas frecuentes
¿Para qué se usa AnyCrawl?
AnyCrawl se usa para convertir páginas web, sitios web y resultados de búsqueda en datos listos para LLM, como Markdown y JSON estructurado. Admite scraping de una sola página, rastreo de sitios completos, recolección de SERP y extracción de JSON con LLM, lo que lo hace útil para aplicaciones de RAG, agentes de IA, herramientas de investigación y pipelines de datos internos.
¿Cómo extraigo JSON de una página web con AnyCrawl?
Usa /v1/scrape, incluye "json" en formats y pasa json_options con un prompt, esquema, o ambos. La documentación del modo JSON de AnyCrawl señala específicamente que si usas json_options pero olvidas incluir "json" en formats, la respuesta no contendrá datos JSON extraídos.
¿Cómo uso Atlas Cloud con AnyCrawl?
Usa Atlas Cloud como el proveedor de LLM compatible con OpenAI en el entorno del servidor de AnyCrawl, no dentro de cada solicitud de scrape. Los documentos de Atlas Cloud describen su endpoint de LLM como compatible con OpenAI con la URL base https://api.atlascloud.ai/v1, mientras que la configuración de proveedor de AnyCrawl usa variables de entorno como ATLASCLOUD_BASE_URL, ATLASCLOUD_API_KEY y configuraciones del modelo de extracción por defecto.
¿Puede AnyCrawl rastrear un sitio web completo?
Sí, AnyCrawl puede rastrear un sitio web a través de /v1/crawl, lo que crea un trabajo de rastreo asíncrono. La API de Crawl te permite controlar el alcance con opciones como max_depth, limit, include_paths y exclude_paths, luego sondear el trabajo de rastreo y obtener resultados paginados.
¿Puede AnyCrawl scrapear resultados de búsqueda de Google?
Sí, AnyCrawl incluye una API de búsqueda (Search API) para recolectar resultados de SERP estructurados antes de scrapear las URLs seleccionadas. Su API de búsqueda admite parámetros como query, pages, limit, lang, country y timeRange, lo que la hace útil cuando tu flujo de IA comienza con una consulta de investigación en lugar de una URL conocida.
¿Es AnyCrawl mejor que Firecrawl o Crawl4AI?
No universalmente; depende de tus necesidades de despliegue y flujo de trabajo. AnyCrawl encaja bien en este tutorial porque buscamos un servicio de Docker local, configuración de proveedor de modelos a nivel de servidor y un flujo de /v1/scrape a JSON simple, mientras que Firecrawl y Crawl4AI tienen fortalezas en extracción gestionada y rastreo programable, respectivamente.
¿Debo usar Cheerio, Playwright o Puppeteer en AnyCrawl?
Comienza con auto o cheerio, y cambia a playwright cuando la página necesite renderizado de JavaScript. La documentación de scrape de AnyCrawl posiciona a Cheerio como ligero para HTML estático y a Playwright/Puppeteer como motores basados en navegador para páginas más complejas; el flujo práctico es inspeccionar el Markdown primero y solo usar un motor más pesado cuando sea necesario.
¿Por qué falta mi salida JSON de AnyCrawl?
La razón más común es que no se incluyó "json" en formats. Otra causa común es que el motor seleccionado no capturó el contenido correctamente, especialmente en sitios renderizados con JavaScript; en ese caso, vuelve a intentar con auto o playwright y verifica el Markdown antes de depurar el esquema.
¿Puedo usar AnyCrawl para pipelines de datos RAG?
Sí, AnyCrawl es una opción práctica para la preparación de datos RAG porque puede convertir páginas web en Markdown y JSON guiado por esquema antes de que el contenido entre en tu base de datos vectorial o sistema de conocimiento. Un buen patrón de producción es scrapear primero, validar los campos extraídos, almacenar la URL de origen y mantener suficiente Markdown para depuración.
¿Cuál es el flujo de trabajo de AnyCrawl más fácil para principiantes?
El flujo más fácil es: scrapear una URL, solicitar Markdown, confirmar que el contenido se ve bien, agregar el modo JSON, validar la salida y solo entonces avanzar a crawl o search. Esto evita mezclar problemas de acceso a páginas, problemas de renderizado y problemas de esquema de extracción en una sola solicitud difícil de depurar.
Conclusión
AnyCrawl es útil porque trata a las páginas web como entradas para sistemas de IA, no solo como documentos HTML para descargar. Comienza con una página, inspecciona el Markdown, agrega un esquema, valida el JSON y solo entonces escala a rastreo o búsqueda.
Ese orden mantiene el flujo de trabajo simple. También mantiene los puntos de falla visibles, que es lo que buscas cuando los datos web se convierten en parte de una aplicación de IA.







