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