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.
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).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.
npm i zod playwright llm-scraper
npm i @ai-sdk/openai
import { openai } from '@ai-sdk/openai'
const llm = openai.chat('gpt-4o')
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')
npm i ollama-ai-provider
import { ollama } from 'ollama-ai-provider'
const llm = ollama('llama3')
import { LlamaModel } from 'node-llama-cpp'
const llm = new LlamaModel({
modelPath: 'model.gguf'
})
import LLMScraper from 'llm-scraper'
const scraper = new LLMScraper(llm)
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()
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)
}
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)
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.