크롤링 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 (검색 결과)

서비스무료 플랜특징링크
SerpAPI100 searches/month가장 많은 검색엔진 지원serpapi.com

웹 스크래핑 API

서비스무료 플랜특징추천 용도
Jina AI Reader10M tokens가장 관대한 무료 플랜, LLM 최적화AI 에이전트, RAG
ScraperAPI1,000 req/month (+ 첫 7일 5,000)7일 고용량 테스트 가능초기 프로토타입
Firecrawl500 creditsLLM용 마크다운 변환AI 콘텐츠 처리
ScrapingBee1,000 calls간단한 API, 신용카드 불필요간단한 스크래핑
Apify$5/month credits500~1,000 페이지, 플랫폼 생태계복잡한 워크플로우
Scrapingdog1,000 credits빠른 속도, 높은 성공률프로덕션 환경
Crawlbase1,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 에이전트/RAGJina AI ReaderFirecrawlLLM 최적화, 관대한 무료 플랜
검색 순위 추적SerpAPI-검색 엔진 전문
가격 모니터링ScraperAPIScrapingdogJavaScript 지원, 안정성
대규모 프로토타입ScraperAPIApify첫 7일 5,000 requests
전체 사이트 수집FirecrawlApify크롤 기능 내장
정기 모니터링ApifyCrawlbase스케줄링, 저장소
학습/테스트Jina AI ReaderScrapingBee무료, 간단

실전 활용 예시

예시 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("스크래핑이 허용되지 않습니다.")

다음 단계

학습 경로

  1. 기초: 이 가이드로 크롤링 API 이해
  2. 실습: Colab 봇 만들기에서 실제 구현
  3. 응용: 5장. 자동화에서 PRD/TDD 작성
  4. 심화: 정기 실행, 데이터 분석 자동화

실무 적용 사례


체크리스트

□ 크롤링 API의 두 가지 종류 이해 (SERP vs 웹 스크래핑)
□ 용도에 맞는 서비스 선택 방법 파악
□ 최소 1개 서비스 무료 계정 생성
□ 간단한 API 호출 테스트 완료
□ robots.txt 확인 방법 숙지
□ 실습 문서에서 실제 봇 구현 준비

Sources

목차

Part 1. 시작하기
Part 2. 핵심 스킬
Part 3. 역할별 가이드
Part 4. 직무별 활용
Part 5. 도구 레퍼런스 > 5.1 전략 가이드
Part 6. 실습 워크북 > 6.1 핵심 스킬 실습
Part 6. 실습 워크북 > 6.2 무역실무 특화 실습