Skrapr

Una herramienta inteligente de web scraping que utiliza IA y automatización del navegador para extraer datos estructurados de sitios web.

Documentación

Skrapr - Servidor MCP

.NET

🎉 ¡Versión en la nube disponible! Completa este formulario para obtener acceso.

Skrapr es una herramienta inteligente de web scraping que combina capacidades de IA con automatización de navegador para extraer datos estructurados de sitios web.

En resumen:

url del sitio web + esquema JSON = datos estructurados del sitio web

Esta herramienta es una alternativa entre la herramienta de solicitud HTTP (volcado) y las herramientas de scraping (fuerza bruta).

Cómo funciona

flowchart LR
  
  agent["Your AI Agent"] l1@--> | scrape_with_schema | skrapr["Skrapr"]
  
  subgraph server [Skrapr MCP Server]

  skrapr l2@--> | use tool | playwright["Playwright MCP"]

  end

  playwright l3@--> |navigates| website["Website"]
  skrapr l4@--> | think with | openai["Azure OpenAI"]
  skrapr l5@-.-> | json data | agent


  classDef customer stroke:#00f, stroke-width: 2
  classDef external stroke:#63af3e,stroke-width: 2,stroke-dasharray: 4
  classDef group fill:#ffffa455, stroke:#ff7c7c, stroke-width: 2

  agent:::customer
  agent:::someclass
  website:::external
  openai:::external
  server:::group

  classDef animate stroke-dasharray: 20,stroke-dashoffset: 900,animation: dash 25s linear infinite;
  class l1 animate

  l2@{ animate: true }
  l3@{ animate: true }
  l4@{ animate: true }
  l5@{ animate: true }

Herramientas disponibles

  • scrape_with_schema:
    • Título: Extraer datos de un sitio web basado en un esquema JSON
    • Descripción: Navegar y extraer datos del sitio web proporcionado que coincidan con la estructura del Esquema JSON proporcionado.
    • Parámetros:
      • url: La URL del sitio web del cual extraer datos.
      • jsonSchema: El Esquema JSON que describe la estructura de datos a extraer.
      • instruction: Instrucciones opcionales para guiar cómo se debe realizar el scraping.
    • Solo lectura: true

Ejemplo

Una vez configurado, puedes usar las capacidades de Skrapr directamente en cualquier cliente MCP (Claude Desktop, n8n, librechat, ...).

Por ejemplo, puedes pedirle a Claude:

Extrae información de productos de todas las categorías en https://example.com/products.
Quiero nombre, descripción y precio de cada producto.

El modelo creará un esquema similar y lo pasará a Skrapr:

{
    "type":"object",
    "properties":{
        "products":{
            "type":"array",
            "items":{
                "type":"object",
                "properties":{
                    "name":{
                        "type":"string"
                    },
                    "price":{
                        "type":"string"
                    },
                    "description":{
                        "type":"string"
                    }
                }
            }
        }
    }
}

Skrapr navegará el sitio web, página por página, hasta que haya encontrado todos los datos que necesita.

Después del scraping, recibirás la siguiente respuesta:

{
    "products": [
        {
            "name": "Product 1",
            "price": "10",
            "description": "Description of product 1"
        },
        {
            "name": "Product 2",
            "price": "20",
            "description": "Description of product 2"
        }
    ]
}

Primeros pasos con el Host MCP

Para una integración típica con un Host MCP (Claude Desktop), así es como configurarlo:

Con .NET:

{
  "mcpServers": {
    "skrapr": {
      "command": "dotnet",
      "args": [
        "run",
        "--project",
        "path/to/Skrapr/Skrapr.csproj"
        "-e", "AzureOpenAi__ApiKey=your-api-key", 
        "-e", "AzureOpenAi__Endpoint=https://your-resource.openai.azure.com/", 
        "-e", "AzureOpenAi__DeploymentName=your-deployment-name", 
        "-e", "PlaywrightMcp__IsLocal=true", 
      ]
    }
  }
}

Con Docker:

  1. Construye la imagen de Docker:

    docker build -t skrapr .
    
  2. Ejecuta el contenedor:

    docker run \
         -p 80:80 \
         -e AzureOpenAi__ApiKey=your-api-key \
         -e AzureOpenAi__Endpoint=https://your-resource.openai.azure.com/ \
         -e AzureOpenAi__DeploymentName=your-deployment-name \
         -e PlaywrightMcp__IsLocal=true \
         skrapr
    
  3. El servidor MCP estará disponible en http://localhost:5000.

  4. Puedes configurar tu Host MCP

    {
      "mcpServers": {
        "skrapr": {
          "url": "http://localhost:5000/sse"
        }
      }
    }
    

Con la versión en la nube

Estoy alojando una instancia de Skrapr en la nube con todo configurado.

Si estás interesado en probarla, contáctame aquí para obtener acceso a la versión beta.

    {
      "mcpServers": {
        "skrapr": {
          "url": "https://[ask-for-url]/sse"
        }
      }
    }

Configuración de Playwright

Playwright puede ejecutarse localmente o de forma remota.

Local

Configurar la variable de entorno PlaywrightMcp__IsLocal=true hará que Playwright se ejecute localmente.

Necesitas tener Node.js instalado para que funcione.

Usa npx @playwright/mcp para ejecutar Playwright.

Remoto

Configurar la variable de entorno PlaywrightMcp__Endpoint usará Playwright en un host remoto.

¿Cómo funciona por dentro?

Agente de IA

Skrapr utiliza un agente de IA internamente con el objetivo de:

  • Comprender la estructura y el contenido del sitio web
  • Navegar autónomamente por el sitio web
  • Tomar decisiones estratégicas de navegación para localizar la información solicitada
  • Producir un resultado JSON estructurado basado en un esquema JSON proporcionado.

Stack técnico

Utiliza:

Gracias a MCP (Model Context Protocol), puedes conectar Skrapr a cualquier agente sin importar el lenguaje.

¿Por qué Skrapr?

Al construir un Agente de IA, es posible que quieras que el agente extraiga información fácilmente de sitios web.

Actualmente, los modelos de IA no pueden navegar sitios web de forma nativa.

Existen herramientas simples de solicitud HTTP, sin embargo, tienen algunas limitaciones:

  • Sin ejecución de JavaScript: no pueden leer contenido dinámico
  • La información puede no estar presente en la página cargada, sino en una subpágina

También existen herramientas de scraping, pero:

  • Cargan demasiada información (scraping aleatorio)
  • Tardan demasiado tiempo en hacer scraping