mishushakov/llm-scraperView GitHub Homepage for Latest Official Releases
使用大语言模型将任意网页转换为结构化数据的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
- 加载原始HTMLmarkdown
- 加载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能力相结合。通过利用大语言模型的理解能力,它能够更智能、更准确地从复杂网页中提取结构化数据,为数据收集和分析提供了全新的解决方案。