Home
Login

Librería de TypeScript que utiliza modelos de lenguaje grandes para convertir cualquier página web en datos estructurados

MITTypeScript 5.0kmishushakov Last Updated: 2025-05-18

LLM Scraper: Descripción Detallada del Proyecto

Resumen del Proyecto

LLM Scraper es una biblioteca de TypeScript que le permite extraer datos estructurados de cualquier página web utilizando modelos de lenguaje grandes (LLM). Desarrollado por mishushakov y alojado en GitHub, este proyecto es una solución innovadora para la extracción de datos web.

Características Principales

Funcionalidades Clave

  • Soporte Multi-LLM: Compatible con modelos locales (Ollama, GGUF), OpenAI y proveedores de Vercel AI SDK.
  • Seguridad de Tipos: Utiliza Zod para definir esquemas, ofreciendo seguridad de tipos completa en TypeScript.
  • Basado en Playwright: Construido sobre el potente framework Playwright.
  • Procesamiento en Flujo (Streaming): Soporta la transmisión en flujo de objetos.
  • Generación de Código: Nueva funcionalidad de generación de código.

Soporte de Formatos de Datos

El proyecto soporta 4 modos de formateo:

  • html - Carga el HTML original.
  • markdown - Carga en formato markdown.
  • text - Carga el texto extraído (usando Readability.js).
  • image - Carga capturas de pantalla (solo multimodal).

Arquitectura Técnica

Principios Fundamentales

En el fondo, utiliza llamadas a funciones para transformar la página en datos estructurados. Este método aprovecha la capacidad de comprensión de los modelos de lenguaje grandes, permitiendo analizar y extraer contenido web de forma inteligente.

Pila Tecnológica

  • TypeScript: Proporciona seguridad de tipos y una buena experiencia de desarrollo.
  • Playwright: Automatización web y obtención de contenido.
  • Zod: Validación de esquemas e inferencia de tipos.
  • AI SDK: Integración con múltiples proveedores de LLM.

Instalación y Uso

Instalación de Dependencias

npm i zod playwright llm-scraper

Ejemplo de Inicialización de LLM

OpenAI

npm i @ai-sdk/openai
import { openai } from '@ai-sdk/openai'
const llm = openai.chat('gpt-4o')

Groq

npm i @ai-sdk/openai
import { createOpenAI } from '@ai-sdk/openai'
const groq = createOpenAI({
  baseURL: 'https://api.groq.com/openai/v1',
  apiKey: process.env.GROQ_API_KEY,
})
const llm = groq('llama3-8b-8192')

Ollama

npm i ollama-ai-provider
import { ollama } from 'ollama-ai-provider'
const llm = ollama('llama3')

GGUF

import { LlamaModel } from 'node-llama-cpp'
const llm = new LlamaModel({
  modelPath: 'model.gguf'
})

Ejemplo de Uso Básico

Crear una Instancia de Scraper

import LLMScraper from 'llm-scraper'
const scraper = new LLMScraper(llm)

Ejemplo de Extracción de Datos de HackerNews

import { chromium } from 'playwright'
import { z } from 'zod'
import { openai } from '@ai-sdk/openai'
import LLMScraper from 'llm-scraper'

// Iniciar una instancia del navegador
const browser = await chromium.launch()

// Inicializar el proveedor LLM
const llm = openai.chat('gpt-4o')

// Crear un nuevo LLMScraper
const scraper = new LLMScraper(llm)

// Abrir una nueva página
const page = await browser.newPage()
await page.goto('https://news.ycombinator.com')

// Definir el esquema del contenido a extraer
const schema = z.object({
  top: z
    .array(
      z.object({
        title: z.string(),
        points: z.number(),
        by: z.string(),
        commentsURL: z.string(),
      })
    )
    .length(5)
    .describe('Top 5 stories on Hacker News'),
})

// Ejecutar el scraper
const { data } = await scraper.run(page, schema, {
  format: 'html',
})

// Mostrar los resultados del LLM
console.log(data.top)
await page.close()
await browser.close()

Funcionalidades Avanzadas

Procesamiento en Flujo (Streaming)

Usar la función stream en lugar de run permite obtener un flujo de objetos parciales (solo para Vercel AI SDK):

// Ejecutar el scraper en modo de flujo
const { stream } = await scraper.stream(page, schema)

// Transmitir en flujo los resultados del LLM
for await (const data of stream) {
  console.log(data.top)
}

Generación de Código

Usar la función generate permite generar scripts de Playwright reutilizables:

// Generar código y ejecutarlo en la página
const { code } = await scraper.generate(page, schema)
const result = await page.evaluate(code)
const data = schema.parse(result)

// Mostrar los resultados parseados
console.log(data.news)

Casos de Uso

Áreas de Aplicación

  • Minería de Datos: Extracción de información estructurada de sitios de noticias, foros, etc.
  • Investigación de Mercado: Recopilación de información sobre productos de la competencia.
  • Agregación de Contenido: Recopilación y organización automatizada de contenido.
  • Sistemas de Monitoreo: Verificación periódica de cambios en sitios web.
  • Análisis de Investigación: Recopilación de datos para investigación académica.

Ventajas y Características

  • Análisis Inteligente: Utiliza LLM para comprender estructuras de página complejas.
  • Seguridad de Tipos: Soporte completo de TypeScript.
  • Configuración Flexible: Soporta múltiples proveedores de LLM.
  • Fácil Integración: Diseño de API sencillo.

Resumen

LLM Scraper es una herramienta innovadora para la extracción de datos web que combina las técnicas tradicionales de web scraping con las capacidades modernas de la IA. Al aprovechar la capacidad de comprensión de los modelos de lenguaje grandes, puede extraer datos estructurados de páginas web complejas de manera más inteligente y precisa, proporcionando una nueva solución para la recopilación y el análisis de datos.