LLM Scraper:用自然语言从任意网页提取结构化数据

# 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元。

© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容