Home
Login

Uma biblioteca TypeScript que usa modelos de linguagem grandes para converter qualquer página da web em dados estruturados

MITTypeScript 5.0kmishushakov Last Updated: 2025-05-18

LLM Scraper - Detalhes do Projeto

Visão Geral do Projeto

LLM Scraper é uma biblioteca TypeScript que permite extrair dados estruturados de qualquer página web usando modelos de linguagem grandes (LLMs). Desenvolvido por mishushakov e hospedado no GitHub, este projeto é uma solução inovadora para extração de dados web.

Características Principais

Funcionalidades Principais

  • Suporte a Múltiplos LLMs: Suporta modelos locais (Ollama, GGUF), OpenAI e provedores Vercel AI SDK.
  • Segurança de Tipos: Utiliza Zod para definir esquemas, garantindo segurança de tipos completa em TypeScript.
  • Baseado em Playwright: Construído sobre o poderoso framework Playwright.
  • Processamento em Stream: Suporta transmissão em stream de objetos.
  • Geração de Código: Nova funcionalidade de geração de código.

Suporte a Formatos de Dados

O projeto suporta 4 modos de formatação:

  • html - Carrega o HTML original
  • markdown - Carrega em formato markdown
  • text - Carrega o texto extraído (usando Readability.js)
  • image - Carrega uma captura de tela (apenas multimodal)

Arquitetura Técnica

Princípio Central

Na sua essência, utiliza chamadas de função para transformar páginas em dados estruturados. Esta abordagem aproveita a capacidade de compreensão dos modelos de linguagem grandes, permitindo analisar e extrair conteúdo web de forma inteligente.

Stack Tecnológica

  • TypeScript - Fornece segurança de tipos e uma boa experiência de desenvolvimento.
  • Playwright - Automação web e obtenção de conteúdo.
  • Zod - Validação de esquema e inferência de tipos.
  • AI SDK - Integração com diversos provedores de LLM.

Instalação e Uso

Instalar Dependências

npm i zod playwright llm-scraper

Exemplo de Inicialização 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'
})

Exemplo de Uso Básico

Criar Instância do Scraper

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

Exemplo de Extração de Dados do HackerNews

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

// Iniciar instância do navegador
const browser = await chromium.launch()

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

// Criar novo LLMScraper
const scraper = new LLMScraper(llm)

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

// Definir esquema para o conteúdo a ser extraído
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'),
})

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

// Exibir resultados do LLM
console.log(data.top)
await page.close()
await browser.close()

Funcionalidades Avançadas

Processamento em Stream

Usar a função stream em vez de run permite obter um stream de objetos parciais (apenas para Vercel AI SDK):

// Executar o scraper em modo stream
const { stream } = await scraper.stream(page, schema)

// Transmitir resultados do LLM em stream
for await (const data of stream) {
  console.log(data.top)
}

Geração de Código

Usar a função generate permite gerar scripts Playwright reutilizáveis:

// Gerar código e executar na página
const { code } = await scraper.generate(page, schema)
const result = await page.evaluate(code)
const data = schema.parse(result)

// Exibir resultados da análise
console.log(data.news)

Casos de Uso

Áreas de Aplicação

  • Mineração de Dados: Extrair informações estruturadas de sites de notícias, fóruns, etc.
  • Pesquisa de Mercado: Coletar informações sobre produtos concorrentes.
  • Agregação de Conteúdo: Automatizar a coleta e organização de conteúdo.
  • Sistemas de Monitoramento: Verificar periodicamente as mudanças em sites.
  • Análise de Pesquisa: Coleta de dados para pesquisa acadêmica.

Vantagens e Características

  • Análise Inteligente: Utiliza LLMs para entender estruturas de página complexas.
  • Segurança de Tipos: Suporte completo a TypeScript.
  • Configuração Flexível: Suporta diversos provedores de LLM.
  • Fácil Integração: Design de API simples.

Conclusão

LLM Scraper é uma ferramenta inovadora de extração de dados web que combina técnicas tradicionais de web scraping com capacidades modernas de IA. Ao aproveitar a capacidade de compreensão dos modelos de linguagem grandes, ele pode extrair dados estruturados de páginas web complexas de forma mais inteligente e precisa, fornecendo uma nova solução para coleta e análise de dados.