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('Hacker News의 상위 5개 스토리'),
})
// 크롤러 실행
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 기능을 결합한 혁신적인 웹 데이터 추출 도구입니다. 대규모 언어 모델의 이해 능력을 활용하여 복잡한 웹 페이지에서 구조화된 데이터를 보다 지능적이고 정확하게 추출하여 데이터 수집 및 분석을 위한 새로운 솔루션을 제공합니다.