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()

高度な機能

ストリーミング処理

run 関数の代わりに stream 関数を使用すると、部分的なオブジェクトストリームを取得できます (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 機能を組み合わせた革新的なウェブデータ抽出ツールです。大規模言語モデルの理解能力を利用することで、複雑なウェブページからよりインテリジェントかつ正確に構造化されたデータを抽出し、データ収集と分析のための新しいソリューションを提供します。