Hikugen: LLM을 사용하여 구조화된 데이터를 추출하는 코드를 생성하는 Web Crawler 생성 도구

Hikugen 소개

Hikugen은 대규모 언어 모델(LLM)을 활용하여 웹사이트에서 구조화된 데이터를 추출하기 위한 파이썬 코드를 자동 생성해주는 AI 기반 웹 스크래핑 도구입니다. Hikugen은 사람이 직접 HTML 구조를 분석하고 파싱 로직을 짜야 했던 기존 방식과 달리, 단순히 원하는 데이터 구조를 Pydantic 스키마로 정의하기만 하면, 해당 웹사이트에서 데이터를 추출하는 코드를 자동으로 생성해주는 기능을 제공합니다. 이렇게 생성된 코드는 내부적으로 AST(추상 구문 트리)를 기반으로 검증되며, 제한된 임포트 리스트를 통해 보안성도 확보하고 있습니다.

Hikugen은 웹 스크래핑의 복잡성과 진입 장벽을 현저히 낮추는 것을 목표로 하고 있습니다. 예를 들어 블로그, 뉴스 기사, 제품 정보 페이지와 같이 정형화된 데이터를 갖고 있는 페이지에서 자동으로 데이터를 추출해 JSON과 같은 형식으로 정리하고 싶을 때 매우 유용합니다. 특히 최근 AI 기반 자동화 기술이 각광받는 가운데, 이런 접근은 실무에서도 빠르게 적용할 수 있는 잠재력을 갖고 있습니다.

또한, Hikugen은 캐시 기능을 내장하고 있어 이미 생성한 추출 코드를 저장하고 재활용함으로써 성능과 효율성까지 고려하고 있습니다. 페이지 구조가 변경되었을 경우에는 캐시를 지우고 새로운 추출 코드를 생성할 수 있는 유연성도 제공합니다.

기존 웹 스크래핑 라이브러리와 비교

전통적인 웹 스크래핑 방식은 BeautifulSoup, lxml, Selenium 등의 라이브러리를 사용하여 HTML을 파싱하고 필요한 정보를 추출하는 방식이 일반적입니다. 이 방식은 개발자가 DOM 구조를 정확히 이해하고, 적절한 선택자(selector)를 작성해야 하며, 웹사이트 구조가 변경되면 이를 수동으로 수정해야 합니다.

반면, Hikugen은 LLM 기반으로 웹페이지 구조를 스스로 파악하고, 사용자가 정의한 Pydantic 스키마에 맞게 필요한 데이터를 추출하는 코드를 자동 생성합니다. 즉, 사람이 선택자나 파싱 로직을 작성할 필요가 없습니다. 이 점에서, Hikugen은 기존 방식보다 더 높은 추상화 수준을 제공하며, 유지보수 측면에서도 유리합니다.

다만, LLM을 사용하기 때문에 성능이나 비용 측면에서는 전통적인 방식보다 무거울 수 있으며, LLM을 사용하기 위한 OpenRouter API 키가 필요합니다.

Hikugen의 기본 사용법

Hikugen은 PyPI를 통해 간편하게 설치할 수 있습니다:

uv add hikugen

Hikugen의 핵심 클래스는 HikuExtractor입니다. 사용자는 추출하고자 하는 데이터의 구조를 pydantic.BaseModel을 통해 정의하고, 대상 웹 사이트의 URL만 전달하면 나머지는 Hikugen이 자동으로 처리합니다:

from hikugen import HikuExtractor
from pydantic import BaseModel, Field
from typing import List

class Article(BaseModel):
    title: str = Field(description="Article title")
    author: str = Field(description="Author name")
    published_date: str = Field(description="Publication date")
    content: str = Field(description="Article body content")

class ArticlePage(BaseModel):
    articles: List[Article] = Field(description="List of articles on the page")

extractor = HikuExtractor(
    api_key="your-openrouter-api-key",
    model="google/gemini-2.5-flash"  # optional
)

result = extractor.extract(
    url="https://example.com/articles",
    schema=ArticlePage,
    cache_key="articles-page"  # optional
)

for article in result.articles:
    print(f"{article.title} by {article.author}")

위 예제처럼 간단한 스키마 정의만으로 웹 페이지에서 원하는 데이터를 추출할 수 있다는 점이 Hikugen의 강력한 장점입니다. 또한, 이미 수집한 HTML에서 데이터를 추출할 수도 있습니다. extract_from_html() 메서드를 통해 동일한 스키마와 함께 HTML 문자열을 전달하면 됩니다. 이는 백엔드 파이프라인에서 API 호출 없이 빠르게 처리할 때 유용합니다.


그 외에도 페이지 구조가 자주 변하거나 테스트 환경에서 여러 번 추출을 반복해야 할 경우, clear_cache_for_key() 또는 clear_all_cache() 메서드를 통해 저장된 파싱 코드를 제거할 수 있습니다. 이를 통해 캐시를 초기화하고 항상 최신 구조를 반영하도록 조정할 수 있습니다. 예를 들어, 다음과 같이 사용할 수 있습니다:

# 특정 키에 대한 캐시 삭제
count = extractor.clear_cache_for_key("https://example.com/articles")
print(f"Deleted {count} cache entries")

# 전체 캐시 삭제
total = extractor.clear_all_cache()
print(f"Deleted {total} total cache entries")

이러한 캐시 기능은 반복되는 작업에서의 성능 개선뿐 아니라, 개발 초기 테스트에서도 유용하게 사용할 수 있습니다.

라이선스

Hikugen 프로젝트는 MIT 라이선스로 공개 및 배포되고 있습니다. 상업적 사용에 제한은 없습니다.

:github: Hikugen 프로젝트 GitHub 저장소




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

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

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

1개의 좋아요