mishushakov/llm-scraperView GitHub Homepage for Latest Official Releases
大規模言語モデルを使用して、任意のウェブページを構造化データに変換するTypeScriptライブラリ
MITTypeScriptllm-scrapermishushakov 6.0k Last Updated: May 18, 2025
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 機能を組み合わせた革新的なウェブデータ抽出ツールです。大規模言語モデルの理解能力を利用することで、複雑なウェブページからよりインテリジェントかつ正確に構造化されたデータを抽出し、データ収集と分析のための新しいソリューションを提供します。