使用大语言模型将任意网页转换为结构化数据的TypeScript库

MITTypeScriptllm-scrapermishushakov 6.0k Last Updated: May 18, 2025

LLM Scraper 项目详细介绍

项目概述

LLM Scraper 是一个 TypeScript 库,允许您使用大语言模型从任何网页提取结构化数据。该项目由 mishushakov 开发,托管在 GitHub 上,是一个创新的网页数据提取解决方案。

核心特性

主要功能

  • 多LLM支持:支持本地模型(Ollama、GGUF)、OpenAI、以及 Vercel AI SDK 提供商
  • 类型安全:使用 Zod 定义模式,完整的 TypeScript 类型安全
  • 基于 Playwright:构建在强大的 Playwright 框架之上
  • 流式处理:支持对象流式传输
  • 代码生成:新增的代码生成功能

数据格式支持

项目支持4种格式化模式:

  • html - 加载原始HTML
  • markdown - 加载markdown格式
  • text - 加载提取的文本(使用 Readability.js)
  • image - 加载屏幕截图(仅多模态)

技术架构

核心原理

在底层,它使用函数调用将页面转换为结构化数据。这种方法利用了大语言模型的理解能力,能够智能地解析和提取网页内容。

技术栈

  • TypeScript - 提供类型安全和开发体验
  • Playwright - 网页自动化和内容获取
  • Zod - 模式验证和类型推断
  • AI SDK - 多种LLM提供商集成

安装和使用

安装依赖

npm i zod playwright llm-scraper

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'
})

基本使用示例

创建爬虫实例

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

HackerNews 数据提取示例

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

// 启动浏览器实例
const browser = await chromium.launch()

// 初始化LLM提供商
const llm = openai.chat('gpt-4o')

// 创建新的LLMScraper
const scraper = new LLMScraper(llm)

// 打开新页面
const page = await browser.newPage()
await page.goto('https://news.ycombinator.com')

// 定义提取内容的模式
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'),
})

// 运行爬虫
const { data } = await scraper.run(page, schema, {
  format: 'html',
})

// 显示LLM结果
console.log(data.top)
await page.close()
await browser.close()

高级功能

流式处理

使用 stream 函数替代 run 函数可以获得部分对象流(仅限 Vercel AI SDK):

// 以流式模式运行爬虫
const { stream } = await scraper.stream(page, schema)

// 流式传输LLM结果
for await (const data of stream) {
  console.log(data.top)
}

代码生成

使用 generate 函数可以生成可重用的 playwright 脚本:

// 生成代码并在页面上运行
const { code } = await scraper.generate(page, schema)
const result = await page.evaluate(code)
const data = schema.parse(result)

// 显示解析结果
console.log(data.news)

应用场景

适用领域

  • 数据挖掘:从新闻网站、论坛等提取结构化信息
  • 市场研究:收集竞争对手产品信息
  • 内容聚合:自动化内容收集和整理
  • 监控系统:定期检查网站变化
  • 研究分析:学术研究数据收集

优势特点

  • 智能解析:利用LLM理解复杂页面结构
  • 类型安全:完整的TypeScript支持
  • 灵活配置:支持多种LLM提供商
  • 易于集成:简洁的API设计

总结

LLM Scraper 是一个创新的网页数据提取工具,将传统的网页爬虫技术与现代AI能力相结合。通过利用大语言模型的理解能力,它能够更智能、更准确地从复杂网页中提取结构化数据,为数据收集和分析提供了全新的解决方案。

Star History Chart