llm-scraper简介
llm-scraper是一个强大的TypeScript库,能够利用大语言模型(LLM)从任意网页中提取结构化数据。它的核心特性包括:
- 支持本地(Ollama, GGUF)、OpenAI、Vercel AI SDK等多种LLM提供商
- 使用Zod定义数据模式,实现完整的TypeScript类型安全
- 基于Playwright框架实现浏览器自动化
- 支持流式输出对象
- 新增代码生成功能
- 提供4种格式化模式:HTML、Markdown、纯文本和图像截图
快速入门
- 安装依赖:
npm i zod playwright llm-scraper
- 初始化LLM:
以OpenAI为例:
import { openai } from '@ai-sdk/openai'
const llm = openai.chat('gpt-4o')
- 创建scraper实例:
import LLMScraper from 'llm-scraper'
const scraper = new LLMScraper(llm)
使用示例
下面是一个从Hacker News提取热门故事的示例:
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')
// 创建scraper实例
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'),
})
// 运行scraper
const { data } = await scraper.run(page, schema, {
format: 'html',
})
// 输出结果
console.log(data.top)
await page.close()
await browser.close()
高级功能
流式输出
使用stream
函数替代run
可以获得部分对象流(仅Vercel AI SDK支持):
const { stream } = await scraper.stream(page, schema)
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-scraper为开发者提供了一种强大而灵活的方式来从网页中提取结构化数据。无论是构建web爬虫、数据分析工具还是自动化测试,llm-scraper都能大大简化这些任务的实现。欢迎访问项目GitHub页面了解更多信息,并为这个开源项目做出贡献。
无论你是想要从特定网站提取数据,还是需要一个通用的网页数据结构化工具,llm-scraper都是一个值得尝试的选择。它结合了LLM的强大能力和web爬虫的灵活性,为开发者提供了一种新的网页数据提取方式。立即开始使用llm-scraper,体验AI驱动的网页数据提取的魅力吧!