Home
Login

使用大型語言模型將任意網頁轉換為結構化資料的 TypeScript 函式庫

MITTypeScript 5.0kmishushakov Last Updated: 2025-05-18

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能力相結合。通過利用大語言模型的理解能力,它能夠更智能、更準確地從複雜網頁中提取結構化數據,為數據收集和分析提供了全新的解決方案。