LlamaIndex

LlamaIndex를 활용한 웹 크롤러 개발

Pro.Dev 2025. 1. 22. 13:07
반응형

LlamaIndex를 활용한 웹 크롤러 개발

웹에서 크롤링한 데이터를 효율적으로 인덱싱하고, 검색 가능한 시스템을 구축하는 것은 데이터 분석과 정보 검색에서 매우 유용합니다. 이번 글에서는 LlamaIndex와 Python을 활용해 웹 데이터를 크롤링하고 검색 시스템을 구축하는 방법을 소개합니다.


1. 프로젝트 개요

목표

  • 웹 페이지의 데이터를 크롤링하여 LlamaIndex로 인덱싱합니다.
  • 크롤링 데이터를 기반으로 자연어 검색 시스템을 구축합니다.

주요 기능

  • 웹 페이지 크롤링 및 데이터 추출
  • LlamaIndex를 활용한 데이터 인덱싱 및 검색
  • 지속 가능한 데이터 업데이트

2. 개발 환경 준비

2.1 필수 라이브러리 설치

다음 명령어를 실행하여 필요한 라이브러리를 설치합니다:

pip install llama-index openai beautifulsoup4 requests

참고: OpenAI API를 사용하려면 API 키를 발급받아야 합니다.

2.2 기본 설정

Python 3.8 이상의 환경에서 개발하는 것을 권장합니다. 가상 환경(venv, Conda)을 사용하면 의존성 관리를 간편하게 할 수 있습니다.


3. 웹 크롤러 및 검색 시스템 구현

3.1 웹 크롤링 데이터 추출

Beautiful Soup을 사용하여 웹 페이지에서 데이터를 크롤링합니다. 다음은 샘플 코드입니다.

import requests
from bs4 import BeautifulSoup

# 웹 크롤링 함수
def crawl_web_page(url):
    response = requests.get(url)
    if response.status_code == 200:
        soup = BeautifulSoup(response.content, "html.parser")
        # 예: 웹 페이지에서 모든 텍스트 추출
        return soup.get_text(separator="\n")
    else:
        print(f"Error: {response.status_code}")
        return ""

# 테스트 URL
url = "https://example.com"
crawled_data = crawl_web_page(url)
print(crawled_data)

3.2 크롤링 데이터 인덱싱

크롤링한 데이터를 LlamaIndex에 추가하여 검색 가능한 인덱스를 생성합니다.

import os
from llama_index import GPTSimpleVectorIndex, Document

# OpenAI API 키 설정
os.environ["OPENAI_API_KEY"] = "YOUR_OPENAI_API_KEY"

# 인덱스 생성 및 데이터 추가
def create_index_from_crawled_data(data):
    document = Document(data)
    index = GPTSimpleVectorIndex([document])
    return index

# 인덱스 생성
index = create_index_from_crawled_data(crawled_data)
print("인덱스 생성 완료!")

3.3 검색 시스템 구현

사용자가 자연어 질의를 입력하면 인덱싱된 데이터에서 적절한 답변을 검색합니다.

# 검색 질의 처리
while True:
    query = input("질문을 입력하세요 (종료하려면 'exit' 입력): ")
    if query.lower() == "exit":
        print("프로그램을 종료합니다.")
        break
    response = index.query(query)
    print(f"답변: {response}")

4. 실행 결과

실행 흐름

  1. 웹 크롤링: 지정된 URL에서 텍스트 데이터를 추출합니다.
  2. 인덱싱: 크롤링 데이터를 LlamaIndex를 통해 검색 가능한 형태로 변환합니다.
  3. 질의 및 응답: 사용자가 입력한 자연어 질문에 대해 인덱스에서 검색된 결과를 반환합니다.

실행 예시

질문을 입력하세요 (종료하려면 'exit' 입력): Example 사이트의 주요 내용은 무엇인가요?
답변: Example 사이트는 도메인 이름 및 인터넷 관련 정보를 제공합니다.

질문을 입력하세요 (종료하려면 'exit' 입력): exit
프로그램을 종료합니다.

5. 확장 가능성

5.1 다중 페이지 크롤링

  • 여러 페이지를 순회하며 크롤링 데이터를 수집하고 인덱싱할 수 있습니다.
  • 페이지 간 링크를 따라가며 데이터를 추가적으로 수집할 수도 있습니다.

5.2 고급 검색 기능

  • 키워드 필터링, 특정 섹션 검색 등 고급 검색 기능을 추가할 수 있습니다.
  • 검색 결과를 사용자의 요구에 맞게 랭킹하거나 요약할 수 있습니다.

5.3 사용자 인터페이스 개발

  • 웹 애플리케이션: Flask나 FastAPI를 사용해 실시간 검색 시스템을 구축할 수 있습니다.
  • 대시보드: Streamlit을 통해 검색 결과를 시각화하고 실시간 업데이트를 지원할 수 있습니다.

참고 자료

반응형