크롤링 API - 웹 데이터 자동 수집
학습 시간: 30분 필요 도구: 크롤링 API 계정 (무료), Python 또는 REST API 클라이언트 난이도: 초급~중급
📚 학습 전 준비 5장. 자동화에서 AI 자동화의 개념을 먼저 학습하세요. 이 가이드는 실습 문서에서 참조할 기술 자료입니다.
크롤링 API란?
웹사이트에서 데이터를 자동으로 수집하는 API 서비스입니다.
왜 필요한가?
수동 작업의 문제점
- 경쟁사 가격 조사: 매일 수십 개 사이트 방문
- 뉴스 모니터링: 여러 매체를 일일이 확인
- 제품 리뷰 수집: 복사-붙여넣기 반복
크롤링 API 사용 시
- 자동화: 정해진 시간에 자동 수집
- 구조화: JSON/CSV로 깔끔하게 정리
- 안정성: IP 차단, CAPTCHA 자동 처리
크롤링 API 종류
1. SERP API (검색 결과 크롤링)
구글, 네이버 등 검색 엔진 결과를 가져옵니다.
활용 사례
- SEO 순위 추적
- 키워드 리서치
- 경쟁사 검색 분석
2. 웹 스크래핑 API
일반 웹사이트에서 데이터를 추출합니다.
활용 사례
- 경쟁사 가격 모니터링
- 뉴스/블로그 수집
- 제품 리뷰 분석
- 채용 공고 수집
📚 2026년 무료 플랜 비교표
SERP API (검색 결과)
| 서비스 | 무료 플랜 | 특징 | 링크 |
|---|---|---|---|
| SerpAPI | 100 searches/month | 가장 많은 검색엔진 지원 | serpapi.com |
웹 스크래핑 API
| 서비스 | 무료 플랜 | 특징 | 추천 용도 |
|---|---|---|---|
| Jina AI Reader ⭐ | 10M tokens | 가장 관대한 무료 플랜, LLM 최적화 | AI 에이전트, RAG |
| ScraperAPI | 1,000 req/month (+ 첫 7일 5,000) | 7일 고용량 테스트 가능 | 초기 프로토타입 |
| Firecrawl | 500 credits | LLM용 마크다운 변환 | AI 콘텐츠 처리 |
| ScrapingBee | 1,000 calls | 간단한 API, 신용카드 불필요 | 간단한 스크래핑 |
| Apify | $5/month credits | 500~1,000 페이지, 플랫폼 생태계 | 복잡한 워크플로우 |
| Scrapingdog | 1,000 credits | 빠른 속도, 높은 성공률 | 프로덕션 환경 |
| Crawlbase | 1,000 requests | 클라우드 스토리지 10,000 문서 | 데이터 보관 필요 시 |
⭐ = 가장 추천
서비스별 상세 가이드
🔍 SERP API
SerpAPI
무료 플랜: 100 searches/month
# 설치
pip install google-search-results
# 사용 예시
from serpapi import GoogleSearch
params = {
"q": "화장품 수출",
"location": "South Korea",
"api_key": "YOUR_API_KEY"
}
search = GoogleSearch(params)
results = search.get_dict()
organic_results = results["organic_results"]
장점
- ✅ Google, Bing, Baidu, Yahoo, Naver 등 다양한 검색엔진
- ✅ 구조화된 JSON 응답
- ✅ 이미지, 쇼핑, 뉴스 검색 지원
활용 사례
- 키워드 순위 추적
- 경쟁사 검색 가시성 분석
- 트렌드 키워드 발굴
공식 문서: SerpAPI Docs
🌐 웹 스크래핑 API
1. Jina AI Reader ⭐ (가장 추천)
무료 플랜: 10 million tokens (매우 관대!)
# 설치 불필요 - REST API 직접 호출
import requests
# 기본 사용
url = "https://r.jina.ai/https://example.com"
response = requests.get(url)
markdown_content = response.text
# API 키 사용 (더 높은 한도)
headers = {"Authorization": "Bearer YOUR_API_KEY"}
response = requests.get(url, headers=headers)
핵심 기능
- ✅ 초간단 사용: URL 앞에
https://r.jina.ai/만 추가 - ✅ LLM 최적화: 마크다운 포맷으로 자동 변환
- ✅ 검색 기능:
https://s.jina.ai/?q=검색어로 웹 검색 - ✅ PDF 지원: PDF도 자동 추출
- ✅ 오픈소스: 자체 호스팅 가능
활용 사례
- RAG 시스템 구축
- AI 에이전트 데이터 수집
- 문서 자동 요약
공식 문서: Jina AI Reader
2. ScraperAPI
무료 플랜: 1,000 req/month (+ 첫 7일 5,000 req)
# 설치
pip install scraperapi-sdk
# 사용 예시
from scraperapi_sdk import ScraperAPIClient
client = ScraperAPIClient('YOUR_API_KEY')
result = client.get('https://example.com')
print(result.text)
# JavaScript 렌더링
result = client.get('https://spa-website.com', render=True)
장점
- ✅ 첫 7일간 5,000 requests (대규모 테스트 가능)
- ✅ CAPTCHA 자동 우회
- ✅ 프록시 로테이션 자동
- ✅ JavaScript 렌더링 지원
활용 사례
- 전자상거래 가격 모니터링
- 대규모 데이터 수집 프로토타입
- SPA(Single Page Application) 스크래핑
공식 문서: ScraperAPI Docs
3. Firecrawl
무료 플랜: 500 credits (신용카드 불필요)
# 설치
pip install firecrawl-py
# 사용 예시
from firecrawl import Firecrawl
app = Firecrawl(api_key="YOUR_API_KEY")
# 단일 페이지 스크래핑 (마크다운으로 변환)
result = app.scrape_url('https://example.com')
print(result['markdown'])
# 전체 웹사이트 크롤링
crawl_result = app.crawl_url('https://example.com',
params={'limit': 100})
핵심 기능
- ✅ LLM 최적화: 마크다운/구조화 데이터로 변환
- ✅ 크롤 기능: 웹사이트 전체 페이지 자동 수집
- ✅ AI 추출: /extract 엔드포인트로 특정 데이터 추출
- ✅ 크레딧 시스템: 1 page = 1 credit (명확함)
활용 사례
- AI 학습 데이터 수집
- 기술 문서 자동 정리
- 경쟁사 전체 콘텐츠 분석
공식 문서: Firecrawl Docs
4. ScrapingBee
무료 플랜: 1,000 API calls
# 설치
pip install scrapingbee
# 사용 예시
from scrapingbee import ScrapingBeeClient
client = ScrapingBeeClient(api_key='YOUR_API_KEY')
response = client.get('https://example.com',
params={
'render_js': True, # JavaScript 실행
'premium_proxy': False, # 무료 프록시
}
)
print(response.content)
장점
- ✅ 신용카드 불필요
- ✅ 간단한 REST API
- ✅ 헤드리스 브라우저 지원
- ✅ JSON/CSV/XML 변환
활용 사례
- 간단한 가격 모니터링
- 소규모 스크래핑 프로젝트
- API 학습용
공식 문서: ScrapingBee Docs
5. Apify
무료 플랜: $5/month credits (500~1,000 페이지)
# 설치
pip install apify-client
# 사용 예시
from apify_client import ApifyClient
client = ApifyClient('YOUR_API_KEY')
# 웹 스크래퍼 실행
run = client.actor("apify/web-scraper").call(
run_input={
"startUrls": [{"url": "https://example.com"}],
"pageFunction": """
async function pageFunction(context) {
return {
title: context.request.url,
content: $('body').text()
};
}
"""
}
)
# 결과 가져오기
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)
핵심 기능
- ✅ 플랫폼 생태계: 1,500+ 미리 만들어진 Actor (스크래퍼)
- ✅ 스케줄링: 정기 실행 자동화
- ✅ 클라우드 저장소: 크롤링 결과 자동 저장
- ✅ 복잡한 워크플로우: 여러 단계 연결 가능
활용 사례
- Google Maps 비즈니스 정보 수집
- Instagram/TikTok 데이터 수집
- 전자상거래 전체 카탈로그 수집
- 정기 모니터링 (매일/매주 자동 실행)
공식 문서: Apify Docs
6. Scrapingdog
무료 플랜: 1,000 credits
# 설치
pip install scrapingdog
# 사용 예시
from scrapingdog import ScrapingdogClient
client = ScrapingdogClient(api_key='YOUR_API_KEY')
response = client.get(
'https://example.com',
dynamic=True, # JavaScript 렌더링
premium=False # 무료 프록시
)
print(response.text)
장점
- ✅ 높은 성공률: 벤치마크에서 100% 성공률
- ✅ 빠른 속도: 2.6~5.6초 응답
- ✅ 안정적인 프로덕션 환경
활용 사례
- 프로덕션 환경 스크래핑
- 높은 안정성 필요한 프로젝트
공식 문서: Scrapingdog Docs
7. Crawlbase (구 ProxyCrawl)
무료 플랜: 1,000 requests + 클라우드 저장소 10,000 문서
# 설치
pip install crawlbase
# 사용 예시
from crawlbase import CrawlingAPI
api = CrawlingAPI({'token': 'YOUR_TOKEN'})
response = api.get('https://example.com')
print(response['body'])
# 저장소 사용
from crawlbase import StorageAPI
storage_api = StorageAPI({'token': 'YOUR_TOKEN'})
# 크롤링 결과 저장
storage_api.store(response['body'])
장점
- ✅ 클라우드 저장소: 10,000 문서 무료 저장
- ✅ 프록시 로테이션
- ✅ CAPTCHA 우회
활용 사례
- 데이터 장기 보관 필요 시
- 이력 추적 (가격 변동 등)
공식 문서: Crawlbase Docs
서비스 선택 가이드
의사결정 플로우
flowchart TD
Start["무엇을 수집하나?"]
Start --> Q1{"검색 결과?"}
Start --> Q2{"일반 웹사이트?"}
Q1 -->|"예"| SerpAPI["SerpAPI<br/>(100 searches)"]
Q2 -->|"AI/LLM 사용?"| Jina["Jina AI Reader<br/>(10M tokens)"]
Q2 -->|"대규모 테스트?"| ScraperAPI["ScraperAPI<br/>(첫 7일 5,000)"]
Q2 -->|"전체 사이트?"| Firecrawl["Firecrawl<br/>(500 credits)"]
Q2 -->|"간단한 작업?"| ScrapingBee["ScrapingBee<br/>(1,000 calls)"]
Q2 -->|"복잡한 워크플로우?"| Apify["Apify<br/>($5 credits)"]
Q2 -->|"프로덕션 환경?"| Scrapingdog["Scrapingdog<br/>(1,000 credits)"]
용도별 추천
| 용도 | 1순위 | 2순위 | 이유 |
|---|---|---|---|
| AI 에이전트/RAG | Jina AI Reader | Firecrawl | LLM 최적화, 관대한 무료 플랜 |
| 검색 순위 추적 | SerpAPI | - | 검색 엔진 전문 |
| 가격 모니터링 | ScraperAPI | Scrapingdog | JavaScript 지원, 안정성 |
| 대규모 프로토타입 | ScraperAPI | Apify | 첫 7일 5,000 requests |
| 전체 사이트 수집 | Firecrawl | Apify | 크롤 기능 내장 |
| 정기 모니터링 | Apify | Crawlbase | 스케줄링, 저장소 |
| 학습/테스트 | Jina AI Reader | ScrapingBee | 무료, 간단 |
실전 활용 예시
예시 1: 경쟁사 가격 모니터링 (Jina AI Reader)
import requests
def get_competitor_price(url):
"""Jina AI로 경쟁사 가격 수집"""
jina_url = f"https://r.jina.ai/{url}"
headers = {"Authorization": "Bearer YOUR_API_KEY"}
response = requests.get(jina_url, headers=headers)
markdown = response.text
# AI로 가격 추출 (예: Gemini)
# price = extract_price_with_ai(markdown)
return markdown
# 사용
competitors = [
"https://competitor1.com/product",
"https://competitor2.com/product"
]
for url in competitors:
content = get_competitor_price(url)
print(f"{url} 수집 완료")
예시 2: 검색 순위 추적 (SerpAPI)
from serpapi import GoogleSearch
def track_keyword_ranking(keyword, my_domain):
"""키워드 검색 순위 확인"""
params = {
"q": keyword,
"api_key": "YOUR_API_KEY",
"num": 100 # 상위 100개 결과
}
search = GoogleSearch(params)
results = search.get_dict()
# 내 사이트 순위 찾기
for i, result in enumerate(results.get("organic_results", []), 1):
if my_domain in result.get("link", ""):
return i
return None # 100위 밖
# 사용
ranking = track_keyword_ranking("화장품 수출", "mycompany.com")
print(f"현재 순위: {ranking}위")
예시 3: 뉴스 모니터링 (Firecrawl)
from firecrawl import Firecrawl
def monitor_news_site(news_url):
"""뉴스 사이트 자동 수집"""
app = Firecrawl(api_key="YOUR_API_KEY")
# 전체 뉴스 사이트 크롤링
result = app.crawl_url(news_url, params={
'limit': 50, # 최근 50개 기사
'scrapeOptions': {
'formats': ['markdown']
}
})
articles = []
for page in result['data']:
articles.append({
'url': page['url'],
'title': page['metadata'].get('title', ''),
'content': page['markdown']
})
return articles
# 사용
articles = monitor_news_site("https://technews.com")
print(f"수집된 기사: {len(articles)}개")
Google Colab 통합 예시
# Google Colab에서 크롤링 API 사용
# 1. Jina AI Reader (가장 간단)
import requests
url = "https://r.jina.ai/https://example.com"
content = requests.get(url).text
print(content)
# 2. AI와 결합
import google.generativeai as genai
# Gemini 설정
genai.configure(api_key="YOUR_GEMINI_KEY")
model = genai.GenerativeModel('gemini-pro')
# 웹 페이지 수집 + AI 분석
jina_url = "https://r.jina.ai/https://competitor.com/product"
page_content = requests.get(jina_url).text
# AI로 정보 추출
prompt = f"""
다음 웹페이지에서 제품 정보를 추출하세요:
{page_content}
다음 형식으로 답변:
- 제품명:
- 가격:
- 주요 특징:
"""
response = model.generate_content(prompt)
print(response.text)
비용 최적화 팁
무료 플랜 최대 활용
# 1. 캐싱으로 중복 요청 방지
import hashlib
import json
from pathlib import Path
def cached_scrape(url, scrape_function):
"""캐시를 사용한 스크래핑"""
cache_dir = Path("scrape_cache")
cache_dir.mkdir(exist_ok=True)
# URL 해시로 캐시 파일명 생성
url_hash = hashlib.md5(url.encode()).hexdigest()
cache_file = cache_dir / f"{url_hash}.json"
# 캐시 확인
if cache_file.exists():
with open(cache_file) as f:
return json.load(f)
# 스크래핑 실행
result = scrape_function(url)
# 캐시 저장
with open(cache_file, 'w') as f:
json.dump(result, f)
return result
# 2. 에러 처리로 크레딧 낭비 방지
def safe_scrape(url, max_retries=3):
"""재시도 로직이 있는 안전한 스크래핑"""
import time
for attempt in range(max_retries):
try:
response = requests.get(f"https://r.jina.ai/{url}")
response.raise_for_status()
return response.text
except Exception as e:
if attempt < max_retries - 1:
time.sleep(2 ** attempt) # 지수 백오프
continue
raise
여러 서비스 병행 사용
# 무료 플랜 한도를 넘지 않도록 여러 서비스 순환 사용
class MultiServiceScraper:
"""여러 스크래핑 서비스를 순환하며 사용"""
def __init__(self):
self.services = [
("jina", self.scrape_jina),
("scrapingbee", self.scrape_scrapingbee),
("scraperapi", self.scrape_scraperapi)
]
self.current_service = 0
def scrape(self, url):
"""현재 서비스로 스크래핑, 실패 시 다음 서비스 시도"""
for _ in range(len(self.services)):
service_name, scrape_func = self.services[self.current_service]
try:
result = scrape_func(url)
return result
except Exception as e:
print(f"{service_name} 실패: {e}")
self.current_service = (self.current_service + 1) % len(self.services)
raise Exception("모든 서비스 실패")
def scrape_jina(self, url):
response = requests.get(f"https://r.jina.ai/{url}")
return response.text
# 다른 서비스 구현...
법적/윤리적 고려사항
⚠️ 주의사항
□ robots.txt 확인: 스크래핑 허용 여부 체크
□ 이용약관 검토: 대상 사이트의 데이터 사용 정책
□ Rate Limiting: 너무 빠른 요청으로 서버 부하 주지 않기
□ 저작권: 수집한 데이터의 사용 범위 확인
□ 개인정보: GDPR, 개인정보보호법 준수
안전한 스크래핑 가이드
# robots.txt 확인
import urllib.robotparser
def can_scrape(url):
"""robots.txt 확인"""
rp = urllib.robotparser.RobotFileParser()
rp.set_url(f"{url}/robots.txt")
rp.read()
return rp.can_fetch("*", url)
# 사용
if can_scrape("https://example.com"):
# 스크래핑 진행
pass
else:
print("스크래핑이 허용되지 않습니다.")
다음 단계
학습 경로
- 기초: 이 가이드로 크롤링 API 이해
- 실습: Colab 봇 만들기에서 실제 구현
- 응용: 5장. 자동화에서 PRD/TDD 작성
- 심화: 정기 실행, 데이터 분석 자동화
실무 적용 사례
체크리스트
□ 크롤링 API의 두 가지 종류 이해 (SERP vs 웹 스크래핑)
□ 용도에 맞는 서비스 선택 방법 파악
□ 최소 1개 서비스 무료 계정 생성
□ 간단한 API 호출 테스트 완료
□ robots.txt 확인 방법 숙지
□ 실습 문서에서 실제 봇 구현 준비