llm-scraper: LLM을 사용하여 Web 문서를 구조화된 데이터로 변환하는 도구

:pytorch:PyTorchKR:kr:

llm-scaper: LLM을 사용하여 Web 문서를 구조화된 데이터로 변환하는 도구

이번에 소개하는 llm-scaper는 게시판의 목록과 같은 Web 문서를 구조화된 데이터로 변환하는 프로젝트로, 스크린샷을 보며 국내 스타트업 리스틀리(Listly)의 초기 버전이 문득 생각난 프로젝트입니다. TypeScript로 제작되었으며, OpenAI와 Local LLM들을 지원하고 있습니다.

개인적으로 ChatGPT 초창기에 LLM을 사용하여 비슷한 기능을 구현해보려고 하다가 Context Window 크기의 부족 (과 비용의 압박:sweat_smile:) 으로 Mozilla 재단Readability.js 프로젝트에 기반한 go-readability를 AWS Lambda에 올려서 사용하고 있는데요, 조만간 이 프로젝트도 한 번 살펴봐야겠습니다. :smiley:


llm-scaper: LLM을 사용하여 Web 문서를 구조화된 데이터로 변환하는 도구

소개

LLM Scraper는 TypeScript로 작성된 라이브러리로, 웹페이지를 구조화된 데이터로 변환할 수 있도록 지원합니다. 이 라이브러리는 플레이라이트 프레임워크를 기반으로 하고 있으며, 로컬 또는 클라우드 기반의 LLM(Language Model)을 활용하여 데이터 추출을 수행합니다. 또한 다양한 입력 모드를 지원하여 사용자가 웹페이지의 HTML, 마크다운, 텍스트 또는 이미지를 손쉽게 로딩할 수 있습니다.

LLM Scraper는 다른 스크래핑 도구들과 비교하여 LLM을 활용한 점에서 독특합니다. 이를 통해 보다 정확하고 구조화된 데이터를 추출할 수 있으며, 다양한 형식의 데이터 입력과 처리가 가능하다는 장점을 가지고 있습니다. 또한, 플레이라이트 프레임워크를 사용함으로써 높은 수준의 브라우저 자동화를 실현할 수 있습니다.

주요 기능

  • 다양한 모델 지원: OpenAI, Groq, GGUF 등 다양한 LLM 모델을 지원합니다.

  • 완벽한 타입 안정성: TypeScript를 사용하여 개발되어 타입 안정성을 보장합니다.

  • 플레이라이트 프레임워크 기반: 브라우저 자동화와 관련된 강력한 기능을 사용할 수 있습니다.

  • 스트리밍 지원: 여러 페이지를 크롤링할 때 스트리밍 방식을 지원합니다.

  • 다중 입력 모드: HTML, 마크다운, 텍스트, 이미지 등 다양한 형식의 입력을 처리할 수 있습니다.

사용 방법

패키지 설치

npm i zod playwright llm-scraper

사용 예시

필요한 패키지들(dependencies)을 설치하였다면 다음과 같은 방법으로 llm-scraper를 사용해볼 수 있습니다. 먼저 사용할 LLM 모델을 초기화한 뒤, playwright를 사용하여 브라우저 인스턴스를 생성하고 LLM Scraper를 연결합니다.

import { chromium } from 'playwright';
import LLMScraper from 'llm-scraper';
import OpenAI from 'openai';

const browser = await chromium.launch();
const llm = new OpenAI();
const scraper = new LLMScraper(browser, llm);

// URL 및 스키마 정의
const urls = ['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 pages = await scraper.run(urls, {
    model: 'gpt-4-turbo',
    schema,
    mode: 'html',
    closeOnFinish: true,
});

// 결과 스트리밍
for await (const page of pages) {
    console.log(page.data);
}

라이선스

MIT License

더 읽어보기

llm-scaper GitHub 저장소

개발 시 참고한 코드

내부적으로는 함수 호출을 사용하여 페이지를 구조화된 데이터로 변환합니다. 이 접근 방식에 대한 자세한 내용은 여기에서 확인할 수 있습니다.

Under the hood, it uses function calling to convert pages to structured data. You can find more about this approach here

Playwright 프로젝트 홈페이지




이 글은 GPT 모델로 정리한 글을 바탕으로 한 것으로, 원문의 내용 또는 의도와 다르게 정리된 내용이 있을 수 있습니다. 관심있는 내용이시라면 원문도 함께 참고해주세요! 읽으시면서 어색하거나 잘못된 내용을 발견하시면 덧글로 알려주시기를 부탁드립니다. :hugs:

:pytorch:파이토치 한국 사용자 모임:kr:이 정리한 이 글이 유용하셨나요? 회원으로 가입하시면 주요 글들을 이메일:love_letter:로 보내드립니다! (기본은 Weekly지만 Daily로 변경도 가능합니다.)

:gift: 아래:arrow_lower_right:쪽에 좋아요:heart:를 눌러주시면 새로운 소식들을 정리하고 공유하는데 힘이 됩니다~ :star_struck: