Claude AI를 사용하여 30분 만에 웹 스크래퍼 구축하기
요약
Claude AI와 Python을 활용하여 복잡한 CSS 셀렉터나 regex 없이도 견고한 웹 스크래퍼를 구축하는 방법을 소개합니다. HTML 구조 변화에 탄력적으로 대응할 수 있는 LLM 기반 데이터 추출 워크플로우를 다룹니다.
핵심 포인트
- CSS 셀렉터 대신 자연어 프롬프트로 데이터 추출 가능
- 사이트 레이아웃 변경에도 깨지지 않는 탄력적 스크래핑
- HTML 전처리(Trim)를 통한 토큰 비용 절감 및 효율성 증대
- 구체적인 프롬프트 작성을 통한 구조화된 JSON 데이터 확보
BeautifulSoup과 regex로 지저분한 HTML을 파싱하려 시도해 본 적이 있다면, 그 고통을 알고 있을 겁니다. 사이트가 업데이트되면 셀렉터(Selectors)가 깨지고, 예외 케이스(edge cases)는 늘어나며, 결국 작동하다가 어느 순간 멈추는 취약한 스크립트를 갖게 됩니다.
Claude AI는 이 모든 것을 완전히 바꿉니다. 불안정한 셀렉터를 작성하는 대신, 원하는 내용을 일반 영어로 설명하기만 하면 Claude가 이를 추출해 줍니다. 여기서는 Python과 Claude API를 사용하여 작동하는 웹 스크래퍼를 30분 만에 구축하는 방법을 소개합니다.
무엇을 만들 것인가
다음 기능을 갖춘 스크래퍼입니다:
requests를 사용하여 모든 웹 페이지 가져오기(Fetch)- HTML을 Claude에게 전송하기
- 깨끗하고 구조화된 JSON 데이터 받기
CSS 셀렉터도, XPath도, regex 지옥도 필요 없습니다.
사전 준비 사항 (Prerequisites)
- Python 3.8 이상
pip install anthropic requests- console.anthropic.com에서 발급받은 Anthropic API 키
Step 1: 페이지 가져오기 (Fetch the Page)
간단한 가져오기(fetch)부터 시작합니다:
import requests
def fetch_page(url: str) -> str:
...
화려할 것 없습니다. 단순히 원본 HTML을 가져오는 것이 전부입니다. 추출 로직은 Claude에게 맡길 것입니다.
Step 2: Claude를 사용하여 데이터 추출 (Extract Data with Claude)
이것이 접근 방식의 핵심입니다. 명확한 추출 프롬프트와 함께 HTML을 Claude에 전달합니다:
import anthropic
import json
...
Claude는 마치 사람이 읽듯이 HTML을 읽습니다. 문맥(context)을 이해하고, 잘못된 마크업(malformed markup)도 처리하며, 깨끗하게 구조화된 데이터를 반환합니다. 셀렉터 유지보수가 필요 없습니다.
Step 3: 통합하기 (Put It Together)
def scrape(url: str, fields: str) -> dict:
print(f"Fetching {url}...")
html = fetch_page(url)
...
실행해 보세요. 어떤 페이지에서든 몇 초 만에 구조화된 데이터를 얻게 될 것입니다.
왜 이것이 전통적인 스크래핑보다 더 잘 작동하는가
전통적인 스크래퍼는 다음 경우에 깨집니다:
- 클래스 이름이
post-title에서article-heading으로 변경될 때 - 데이터가 다른 DOM 노드로 이동할 때
- 사이트가 레이아웃을 섞는 A/B 테스트를 추가할 때
Claude 기반 스크래퍼는 Claude가 의도(intent)를 이해하기 때문에 탄력적입니다.
HTML을 먼저 다듬으세요 (Trim your HTML first). 대부분의 페이지에는 필요 없는 내비게이션 (nav), 푸터 (footer), 스크립트 (script) 태그가 50KB 이상 포함되어 있습니다. Claude로 보내기 전에 관련 섹션만 잘라내세요:
# Claude로 보내기 전에 메인 콘텐츠 영역을 찾습니다
start = html.find('<main')
end = html.find('</main>') + 7
...
프롬프트 (Prompt)를 구체적으로 작성하세요. "제품 정보 추출"은 모호합니다. "제품명, USD 기준 가격, 그리고 재고 여부를 추출"과 같이 작성하면 매번 깔끔한 결과물을 얻을 수 있습니다.
응답을 캐싱 (Cache)하세요. 동일한 추출 작업을 반복해서 실행하는 경우, HTML 가져오기 (fetch) 결과를 캐싱하고 콘텐츠가 변경될 때만 Claude를 다시 실행하세요.
다음 단계
이 방식은 일회성 추출에는 매우 효과적입니다. 하지만 로그인이 필요하거나, 자바스크립트 렌더링 (JavaScript rendering), 또는 CAPTCHA 처리가 필요한 사이트의 경우에는 브라우저 자동화 (browser automation)를 추가로 적용해야 합니다.
저는 인증된 스크래핑 (authenticated scraping), 동적 페이지 처리 (dynamic page handling), 재시도 로직 (retry logic), 그리고 Claude 추출 기능을 바로 배포 가능한 스타터 키트 (starter kit)로 패키징해 두었습니다. 설정 과정을 건너뛰고 즉시 프로덕션급 (production-grade) 스크래핑을 시작하고 싶다면, **Claude Browser Agent Starter Kit**를 확인해 보세요. 제가 모든 자동화 프로젝트에 사용하는 도구입니다.
위에서 설명한 30분 버전만으로도 놀라울 정도로 많은 것을 해낼 수 있습니다. 대부분의 공개 페이지는 충분히 공략 가능합니다. 로그인 흐름, JS 중심의 SPA (Single Page Application), 속도 제한 (rate limiting) 등 더 깊이 있는 작업이 필요해지면 스타터 키트가 해결책이 되어 줄 것입니다.
질문이 있거나 특정 사이트의 스크래핑을 보고 싶다면 아래에 댓글을 남겨주세요.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기