AI 기술이 웹 크롤링을 어떻게 혁신하고 있는가?
복잡한 웹사이트에서 필요한 데이터를 추출하는 작업은 오랫동안 개발자의 수작업과 정교한 CSS 선택자, XPath 표현식에 의존해 왔습니다. 하지만 이제 대규모 언어 모델(LLM)의 발전으로 이 과정이 근본적으로 변화하고 있습니다. ScrapeGraphAI는 사용자가 자연어로 원하는 정보를 설명하면, 그에 맞춰 자동으로 스크레이핑 파이프라인을 구성하고 실행하는 파이썬 라이브러리입니다.
주요 기능 요약
- 자연어 기반 설정: "모든 뉴스 제목과 요약을 나열해줘"처럼 말하면 AI가 스스로 크롤링 전략을 결정합니다.
- 다양한 LLM 지원: OpenAI, Google Gemini, Groq, Ollama 등 다양한 언어 모델과 연동 가능합니다.
- JavaScript 렌더링 처리: Playwright를 내부적으로 활용해 동적 콘텐츠도 정확히 수집합니다.
- 최소 코드 요구: 단 5~10줄의 코드로 복잡한 스크레이핑 작업을 자동화할 수 있습니다.
시작하기
PyPI를 통해 간단히 설치할 수 있으며, JavaScript 기반 사이트 크롤링을 위해서는 추가로 Playwright를 설정해야 합니다.
pip install scrapegraphai
playwright install
지원되는 그래프 유형
- SmartScraperGraph: 단일 페이지에서 자연어 지시에 따라 데이터를 추출합니다.
- SearchGraph: 특정 키워드로 검색하여 상위 결과 페이지들을 자동 탐색하고 정보를 수집합니다.
- SpeechGraph: 추출된 텍스트를 음성 파일(WAV 형식)로 변환하여 출력합니다.
실제 코드 예제
1. 로컬 Ollama 모델 사용 (mistral)
from scrapegraphai.graphs import SmartScraperGraph
configuration = {
"llm": {
"model": "ollama/mistral",
"temperature": 0,
"format": "json",
"base_url": "http://localhost:11434"
},
"embeddings": {
"model": "ollama/nomic-embed-text",
"base_url": "http://localhost:11434"
}
}
scraper = SmartScraperGraph(
prompt="웹페이지 내 모든 프로젝트 이름과 설명을 목록 형태로 제공하세요.",
source="https://perinim.github.io/projects",
config=configuration
)
result = scraper.run()
print(result)
2. OpenAI GPT-3.5 활용
import os
from scrapegraphai.graphs import SmartScraperGraph
openai_key = os.getenv("OPENAI_API_KEY")
config = {
"llm": {
"api_key": openai_key,
"model": "gpt-3.5-turbo"
}
}
scraper = SmartScraperGraph(
prompt="모든 아티클의 제목과 링크를 JSON 배열로 반환하세요.",
source="https://perinim.github.io/projects",
config=config
)
output = scraper.run()
print(output)
3. Groq + 임베딩 모델 조합
from scrapegraphai.graphs import SmartScraperGraph
config = {
"llm": {
"model": "groq/llama-70b-chat",
"api_key": os.getenv("GROQ_APIKEY"),
"temperature": 0
},
"embeddings": {
"model": "ollama/nomic-embed-text",
"base_url": "http://localhost:11434"
},
"headless": False # 디버깅 시 브라우저 창 표시
}
graph = SmartScraperGraph(
prompt="프로젝트명, 설명, 작성자를 추출하세요.",
source="https://perinim.github.io/projects",
config=config
)
data = graph.run()
print(data)
Docker 환경에서의 배포
Ollama 컨테이너를 통해 로컬에서 안정적으로 모델을 운영할 수 있습니다.
# Docker Compose로 서비스 시작
docker-compose up -d
# 원하는 모델 다운로드
docker exec -it ollama ollama pull mistral
컨테이너가 실행 중이면 위의 Python 코드에서 base_url을 통해 접근할 수 있습니다.
결론: AI 기반 스크레이핑의 가능성
ScrapeGraphAI는 반복적인 스크레이핑 스크립트 작성 부담을 줄이고, 개발자는 데이터 파이프라인 설계와 후처리 로직에 더 집중할 수 있게 해줍니다. 특히 비기술 사용자도 간단한 지시문만으로 데이터를 추출할 수 있는 잠재력을 가지고 있어, 데이터 수집 자동화의 접근성을 크게 낮추고 있습니다.