AI로 웹 크롤러 만들기 - BeautifulSoup + Claude API 조합
2026년 4월 기준 | AI 개발 가이드 · 자동화
이 글에서 만드는 것: 웹 페이지를 크롤링한 뒤, AI가 자동으로 데이터를 정리·분석하는 프로그램입니다. 기존 크롤러는 HTML 구조가 바뀌면 코드를 수정해야 했지만, AI를 붙이면 구조 변경에도 유연하게 대응할 수 있습니다.
왜 크롤러에 AI를 붙이나
기존 크롤러의 가장 큰 문제는 깨지기 쉽다는 것입니다.
# 기존 방식: CSS 셀렉터에 의존
title = soup.select_one("h3.news_tit > a").text # 클래스명이 바뀌면 에러
사이트가 HTML 구조를 바꾸면 크롤러가 바로 죽습니다. 그때마다 셀렉터를 수정해야 합니다.
AI를 붙이면 이 문제를 해결할 수 있습니다. HTML 전체를 AI에게 주고 "여기서 제목을 뽑아줘"라고 하면, 구조가 바뀌어도 AI가 알아서 찾아줍니다.
기본 크롤러 만들기
먼저 전통적인 방식의 기본 크롤러입니다.
import requests
from bs4 import BeautifulSoup
def crawl_page(url: str) -> str:
"""웹 페이지의 텍스트를 가져옵니다."""
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"}
response = requests.get(url, headers=headers, timeout=10)
response.raise_for_status()
soup = BeautifulSoup(response.text, "html.parser")
# 불필요한 태그 제거
for tag in soup.find_all(["script", "style", "nav", "footer", "header"]):
tag.decompose()
return soup.get_text(separator="\n", strip=True)
# 테스트
text = crawl_page("https://example.com")
print(text[:500])
이 코드는 HTML에서 텍스트만 추출합니다. 여기에 AI를 연결하면 텍스트를 자동으로 분석할 수 있습니다.
AI 분석 기능 추가
크롤링한 텍스트를 Claude API에 보내서 구조화된 데이터로 변환합니다.
import anthropic
import json
client = anthropic.Anthropic()
def extract_with_ai(text: str, instruction: str) -> dict:
"""AI로 텍스트에서 원하는 정보를 추출합니다."""
prompt = f"""{instruction}
웹 페이지 텍스트:
---
{text[:5000]}
---
JSON 형식으로만 응답해주세요. 설명은 필요 없습니다."""
response = client.messages.create(
model="claude-haiku-4-5-20251001", # 추출 작업은 Haiku로 충분
max_tokens=1024,
messages=[{"role": "user", "content": prompt}]
)
# JSON 파싱
result_text = response.content[0].text
try:
return json.loads(result_text)
except json.JSONDecodeError:
# JSON 블록만 추출
start = result_text.find("{")
end = result_text.rfind("}") + 1
return json.loads(result_text[start:end])
핵심: Haiku 모델을 사용합니다. 데이터 추출은 복잡한 추론이 필요 없어서, 가장 저렴한 모델로도 충분합니다. Opus 대비 비용이 1/50입니다.
크롤링 + AI 통합 코드
두 기능을 합쳐서, URL만 넣으면 구조화된 데이터가 나오는 함수를 만듭니다.
def smart_crawl(url: str, fields: list[str]) -> dict:
"""URL에서 지정한 필드를 AI로 추출합니다."""
# 1. 크롤링
text = crawl_page(url)
# 2. AI 추출 지시 생성
fields_str = ", ".join(fields)
instruction = f"이 웹 페이지에서 다음 정보를 추출해주세요: {fields_str}"
# 3. AI 분석
result = extract_with_ai(text, instruction)
return result
# 사용 예시
data = smart_crawl(
url="https://example-blog.com/post/123",
fields=["제목", "작성자", "작성일", "본문 요약", "태그"]
)
print(json.dumps(data, ensure_ascii=False, indent=2))
출력 예시:
{
"제목": "파이썬 웹 크롤링 입문 가이드",
"작성자": "김개발",
"작성일": "2026-03-25",
"본문 요약": "requests와 BeautifulSoup을 사용한 기초 크롤링 방법을 다룬 입문 가이드",
"태그": ["파이썬", "크롤링", "BeautifulSoup", "웹스크래핑"]
}
CSS 셀렉터를 하나도 안 썼는데 데이터가 깔끔하게 추출됩니다. 사이트 구조가 바뀌어도 이 코드는 수정할 필요가 없습니다.
실전 활용 - 뉴스 자동 요약기
이 기술을 응용해서 뉴스 기사를 자동으로 수집하고 요약하는 프로그램을 만들어보겠습니다.
import time
def summarize_news(urls: list[str]) -> list[dict]:
"""뉴스 URL 목록을 받아서 각각 요약합니다."""
results = []
for url in urls:
print(f"처리 중: {url}")
try:
text = crawl_page(url)
data = extract_with_ai(text, """다음 뉴스 기사를 분석해주세요.
JSON 형식으로 응답:
{
"title": "기사 제목",
"summary": "3줄 요약",
"category": "정치/경제/사회/IT/문화 중 하나",
"key_points": ["핵심 포인트 1", "핵심 포인트 2"]
}""")
data["url"] = url
results.append(data)
except Exception as e:
print(f" 에러: {e}")
time.sleep(2) # 예의 바른 크롤링
return results
# 사용 예시
news_urls = [
"https://news-site.com/article/1",
"https://news-site.com/article/2",
"https://news-site.com/article/3",
]
summaries = summarize_news(news_urls)
for s in summaries:
print(f"\n[{s.get('category', '?')}] {s.get('title', '?')}")
print(f" {s.get('summary', '')}")
이 코드를 매일 아침 cron으로 돌리면, 자동으로 뉴스를 수집하고 요약해주는 시스템이 됩니다. Haiku 모델을 쓰면 뉴스 100건 처리해도 비용이 $0.5 미만입니다.
크롤링 시 주의사항
법적/윤리적 주의
- robots.txt를 확인하세요. 크롤링이 금지된 사이트는 피해야 합니다.
- 요청 간격을 두세요. time.sleep(2) 이상을 권장합니다. 서버에 부담을 주면 IP가 차단될 수 있습니다.
- 개인정보를 수집하지 마세요. 이름, 전화번호, 이메일 등을 무단 수집하면 법적 문제가 됩니다.
기술적 주의
- JavaScript 렌더링 페이지: requests로 가져올 수 없는 사이트는 Playwright나 Selenium이 필요합니다.
- AI에 보내는 텍스트 길이: 너무 긴 텍스트는 잘라서 보내야 합니다. 5,000자 정도가 적당합니다.
- 에러 처리: 네트워크 에러, 타임아웃, AI 파싱 실패 등에 대비해야 합니다.
다음 글에서는 이 크롤러를 확장해서 AI가 웹 데이터를 분석하고 자동으로 보고서를 생성하는 시스템을 만들어보겠습니다.
전체 코드: 이 글의 코드를 합치면 약 60줄입니다. crawl_page() + extract_with_ai() + smart_crawl() 세 함수만 있으면 어떤 사이트든 AI로 데이터를 추출할 수 있습니다.
'AI 개발 가이드' 카테고리의 다른 글
| Claude Code CLI로 프로젝트 자동화하기 - 실전 워크플로우 (0) | 2026.04.09 |
|---|---|
| AI 코드 리뷰 자동화 - GitHub Actions + Claude API로 PR 자동 리뷰 (0) | 2026.04.06 |
| LangChain 입문 가이드 - 파이썬으로 AI 앱 만들기 (0) | 2026.04.05 |
| 프롬프트 엔지니어링 개발자용 실전 가이드 - 원하는 답을 뽑아내는 기술 (0) | 2026.04.04 |
| 파이썬으로 AI 챗봇 만들기 - 초보자도 30분이면 완성 (0) | 2026.04.04 |