반응형
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. 실행 결과
실행 흐름
- 웹 크롤링: 지정된 URL에서 텍스트 데이터를 추출합니다.
- 인덱싱: 크롤링 데이터를 LlamaIndex를 통해 검색 가능한 형태로 변환합니다.
- 질의 및 응답: 사용자가 입력한 자연어 질문에 대해 인덱스에서 검색된 결과를 반환합니다.
실행 예시
질문을 입력하세요 (종료하려면 'exit' 입력): Example 사이트의 주요 내용은 무엇인가요?
답변: Example 사이트는 도메인 이름 및 인터넷 관련 정보를 제공합니다.
질문을 입력하세요 (종료하려면 'exit' 입력): exit
프로그램을 종료합니다.
5. 확장 가능성
5.1 다중 페이지 크롤링
- 여러 페이지를 순회하며 크롤링 데이터를 수집하고 인덱싱할 수 있습니다.
- 페이지 간 링크를 따라가며 데이터를 추가적으로 수집할 수도 있습니다.
5.2 고급 검색 기능
- 키워드 필터링, 특정 섹션 검색 등 고급 검색 기능을 추가할 수 있습니다.
- 검색 결과를 사용자의 요구에 맞게 랭킹하거나 요약할 수 있습니다.
5.3 사용자 인터페이스 개발
- 웹 애플리케이션: Flask나 FastAPI를 사용해 실시간 검색 시스템을 구축할 수 있습니다.
- 대시보드: Streamlit을 통해 검색 결과를 시각화하고 실시간 업데이트를 지원할 수 있습니다.
참고 자료
반응형
'LlamaIndex' 카테고리의 다른 글
LlamaIndex와 Pandas를 이용한 데이터 분석 및 검색 (0) | 2025.01.22 |
---|---|
LlamaIndex와 FastAPI를 결합한 검색 API 개발 (0) | 2025.01.22 |
LlamaIndex를 이용한 Python 실시간 데이터 처리 (0) | 2025.01.22 |
LlamaIndex를 사용한 JSON 데이터 인덱싱 (0) | 2025.01.22 |
LlamaIndex와 SQLite를 이용한 데이터베이스 검색 최적화 (0) | 2025.01.22 |