# LLM Scraper:用自然语言从任意网页提取结构化数据
传统网页爬虫依赖 CSS 选择器或 XPath 路径来提取数据,一旦网站改版就需要重新编写代码,维护成本极高。LLM Scraper 是一个创新的 TypeScript 库,它利用大语言模型的能力,让你用自然语言描述想要提取的数据,直接从任意网页获取结构化结果。目前在 GitHub 已获得 6,000+ 颗星,是 AI 与数据提取结合的标杆项目。
## 项目简介
LLM Scraper 基于 TypeScript 开发,底层使用 Playwright 框架渲染页面,结合 Vercel AI SDK 与主流大语言模型(GPT、Claude、Gemini、Llama、Qwen 等)实现智能数据提取。项目支持 Zod 进行数据类型定义,提供完整的类型安全保障,同时支持流式输出和多种内容加载格式。
项目地址:https://github.com/mishushakov/llm-scraper
开源协议:MIT
## 核心特色
### 1. 自然语言驱动
告别复杂的 CSS 选择器,只需要描述你要什么数据,LLM 就能理解并提取:
“`typescript
const { data } = await extract(
page,
{
title: z.string(),
price: z.string(),
description: z.string()
},
‘Extract the product title, price and description’
);
“`
### 2. 多模型支持
支持市面上主流的大语言模型:
– OpenAI GPT-4o / GPT-4o-mini
– Anthropic Claude 3.5 Sonnet
– Google Gemini 1.5 Flash
– Groq 系列模型
– 任何兼容 OpenAI API 格式的自托管模型(如 Ollama)
### 3. 多种内容格式
LLM Scraper 支持 6 种不同的内容加载方式,可根据实际需求选择最合适的:
– `html`:预处理后的 HTML(推荐)
– `raw_html`:原始 HTML
– `markdown`:转换为 Markdown
– `text`:纯文本(使用 Readability.js 提取)
– `image`:截图(多模态模型专用)
– `custom`:自定义函数
### 4. Zod Schema 验证
使用 Zod 定义数据结构,提取结果自动类型校验,确保数据质量:
“`typescript
const schema = z.object({
title: z.string(),
price: z.number(),
rating: z.object({
value: z.number(),
count: z.number()
}),
inStock: z.boolean()
});
const { data } = await extract(page, schema, ‘…’);
// data 自动类型化为正确类型
“`
### 5. 流式输出支持
对于大段文本内容,支持流式输出,可以边提取边处理:
“`typescript
const { stream } = await extract(
page,
{ content: z.string() },
‘Extract the main article content’,
{ stream: true }
);
“`
## 安装步骤
LLM Scraper 需要 Node.js 18+ 环境:
“`bash
npm i zod playwright llm-scraper
npx playwright install chromium
“`
根据使用的模型,安装对应的 SDK:
“`bash
# OpenAI
npm i @ai-sdk/openai
# Anthropic
npm i @ai-sdk/anthropic
# Google
npm i @ai-sdk/google
“`
## 快速上手
### 1. 初始化 LLM
“`typescript
// 使用 OpenAI
import { openai } from ‘@ai-sdk/openai’
const llm = openai(‘gpt-4o’)
// 或使用 Anthropic
import { anthropic } from ‘@ai-sdk/anthropic’
const llm = anthropic(‘claude-3-5-sonnet-20240620’)
“`
### 2. 初始化浏览器
“`typescript
import { chromium } from ‘playwright’
const browser = await chromium.launch()
const page = await browser.newPage()
await page.goto(‘https://news.ycombinator.com/’)
“`
### 3. 提取数据
“`typescript
import { extract } from ‘llm-scraper’
import { z } from ‘zod’
const result = await extract(
page,
z.object({
title: z.string(),
points: z.number(),
author: z.string(),
url: z.string().url()
}),
‘Extract all posts with their title, points, author name and URL’
)
console.log(result.data)
// [{
// title: ‘Show HN: I built a…’,
// points: 342,
// author: ‘someuser’,
// url: ‘https://example.com’
// }]
“`
### 4. 关闭浏览器
“`typescript
await browser.close()
“`
## 进阶用法
### 使用 Claude(Anthropic)
“`typescript
import { anthropic } from ‘@ai-sdk/anthropic’
import { extract } from ‘llm-scraper’
import { chromium } from ‘playwright’
import { z } from ‘zod’
const browser = await chromium.launch()
const page = await browser.newPage()
await page.goto(‘https://example.com/products’)
const llm = anthropic(‘claude-3-5-sonnet-20240620’)
const result = await extract(
page,
z.object({
products: z.array(z.object({
name: z.string(),
price: z.string(),
}))
}),
‘Extract all product names and prices’,
{ llm }
)
console.log(result.data)
await browser.close()
“`
### 自定义内容格式
“`typescript
const result = await extract(
page,
schema,
‘Extract the article content as markdown’,
{
format: ‘markdown’,
llm
}
)
“`
### 批量提取多页数据
“`typescript
import { crawl } from ‘llm-scraper’
const results = await crawl(
browser,
[
‘https://example.com/page1’,
‘https://example.com/page2’,
‘https://example.com/page3’
],
schema,
‘Extract job title, company, salary and location’,
{ llm }
)
“`
## 适用场景
### 竞品价格监控
用自然语言描述要提取的字段,快速搭建竞品数据监控系统,无需维护复杂的 CSS 选择器。
### 房源信息聚合
从多个房产网站批量提取房源信息(价格、面积、户型、位置),构建自己的房源数据库。
### 招聘数据分析
监控多个招聘平台,提取职位描述、薪资范围、技能要求,用于就业市场分析。
### 舆情监测
从新闻网站和社交媒体提取评论、点赞数、发布时间等结构化数据,辅助舆情分析。
### AI 数据集构建
用 LLM Scraper 批量构建高质量的训练数据集,通过自然语言描述灵活定义要提取的内容。
## 代码生成功能
LLM Scraper 还提供代码生成功能,可以根据网页内容自动生成 TypeScript 提取代码:
“`typescript
import { generate } from ‘llm-scraper’
const code = await generate(
page,
‘Extract all blog post titles and publication dates’,
{ llm }
)
console.log(code)
// 输出可直接使用的 TypeScript 代码
eval(code) // 执行生成的代码
“`
## 总结
LLM Scraper 巧妙地将大语言模型的理解能力与网页抓取结合,用自然语言彻底改变了传统的数据提取方式。它的 Zod Schema 验证保证了数据类型安全,Playwright 底层保障了 JavaScript 渲染页面的支持,而多模型架构则给了开发者充分的选择权。如果你厌倦了维护那些脆弱的 CSS 选择器,不妨试试 LLM Scraper,体验 AI 驱动的智能数据提取。
开源协议:MIT
项目地址:https://github.com/mishushakov/llm-scraper
服务支持:如有兴趣不会搭建,可以联系微信:WRYD6166,开源项目搭建10-50元。









暂无评论内容