← 블로그 홈

SerpAPI 완전 가이드 - Google 검색 크롤링 대안의 모든 것

SerpAPI 완전 가이드 - Google 검색 크롤링 대안의 모든 것

SerpAPI 완전 가이드 - Google 검색 크롤링 대안의 모든 것

Google 검색 결과를 자동으로 수집하고 싶었던 경험이 있으신가요? 저는 있었습니다. 직접 크롤링을 시도하다가 IP 차단, CAPTCHA, 구조 변화 등 다양한 벽에 부딪혔죠. 이 문제를 해결하기 위해 찾은 대안이 SerpAPI입니다. 오늘은 SerpAPI가 무엇인지, 어떻게 사용하는지, 그리고 무료로试用하는 방법까지 정리합니다.


Google 검색 크롤링의 현실

크롤링 시도에서 마주한 벽

직접 Google 검색 결과를 크롤링하려고 하면 다음과 같은 문제들이 발생합니다:

문제 설명
IP 차단 반복적인 요청으로 인해 Google이 요청을 차단
CAPTCHA 비정상적인 트래픽으로 인해 검증 요청 발생
구조 변화 Google의 HTML 구조가 빈번하게 변경되어 파싱 실패
동적 콘텐츠 JavaScript로 렌더링되는 콘텐츠无法抓取
** rate limit** 短时间内大量请求时被限制

저는 Python으로 requestsBeautifulSoup을 사용해 크롤러를 만들었지만, 며칠 만에 IP가 차단되고, HTML 구조가 변경되어 파싱 코드가 작동하지 않았습니다.


SerpAPI란?

SerpAPI는 Google, Bing, Baidu 등 주요 검색 엔진의 검색 결과 데이터를 API 형태로 제공하는 서비스입니다. 직접 크롤링하는 대신 SerpAPI를 통해 안정적으로 검색 결과를 가져올 수 있습니다.

핵심 특징

  • 직접 크롤링 대안:我们自己不用爬Google, API로 결과만 받음
  • 구조화된 데이터:JSON 형태로 검색 결과를 반환
  • 스크린샷 지원:검색 결과 페이지의 이미지 भी 제공
  • 무료 티어 제공:월 250회까지 무료 사용 가능

지원 검색 엔진

SerpAPI는 다음과 같은 검색 엔진을 지원합니다:

  • Google
  • Bing
  • Baidu
  • Yahoo
  • DuckDuckGo
  • Yandex
  • Naver (제한적)

SerpAPI 사용 방법

1. API 키 발급

먼저 SerpAPI 웹사이트에서 계정을 생성하고 API 키를 발급받습니다.

  1. SerpAPI 웹사이트 방문
  2. Sign Up으로 계정 생성
  3. Dashboard에서 API Key 확인

2. 기본 사용 예시

import requests

# API 키 설정
API_KEY = "your_api_key_here"

# 검색 쿼리 설정
query = "Python programming"
engine = "google"
num_results = 10

# API 요청 URL
url = f"https://serpapi.com/search?q={query}&engine={engine}&num={num_results}&api_key={API_KEY}"

# 요청 보내기
response = requests.get(url)
data = response.json()

# 결과 출력
for result in data.get("organic_results", []):
    print(f"Title: {result.get('title')}")
    print(f"Link: {result.get('link')}")
    print(f"Snippet: {result.get('snippet')}")
    print("---")

3. 검색 결과 페이지 스크린샷 얻기

SerpAPI의 가장 강력한 기능 중 하나는 검색 결과 페이지의 스크린샷을 얻을 수 있다는 것입니다.

import requests

API_KEY = "your_api_key_here"

# 스크린샷 포함하여 요청
params = {
    "q": "Django REST Framework tutorial",
    "engine": "google",
    "num": 10,
    "api_key": API_KEY,
    "tbm": "isch",  # 이미지 검색
    "ijn": 0,  # 페이지 번호
}

response = requests.get("https://serpapi.com/search", params=params)
data = response.json()

# 이미지 결과에서 스크린샷 확인
if "images_results" in data:
    for image in data["images_results"][:5]:
        print(f"Thumbnail: {image.get('thumbnail')}")
        print(f"Source: {image.get('source')}")
        print("---")

# 전체 페이지 스크린샷 (Paid 플랜)
if "search_metadata" in data:
    print(f"PNG URL: {data.get('image_url')}")

4. 다양한 검색 유형 지원

# 일반 웹 검색
params = {
    "q": "best Python frameworks 2026",
    "engine": "google",
    "api_key": API_KEY,
}

# 이미지 검색
params = {
    "q": "cat images",
    "engine": "google",
    "tbm": "isch",  # image search
    "api_key": API_KEY,
}

# 뉴스 검색
params = {
    "q": "AI technology",
    "engine": "google",
    "tbm": "nws",  # news search
    "api_key": API_KEY,
}

# 비디오 검색
params = {
    "q": "Python tutorial",
    "engine": "google",
    "tbm": "vid",  # video search
    "api_key": API_KEY,
}

주요 기능 정리

1. 검색 결과 유형

SerpAPI는 다양한 검색 결과를 반환합니다:

필드 설명
organic_results 일반 검색 결과
knowledge_graph 지식 그래프 정보
images_results 이미지 검색 결과
news_results 뉴스 검색 결과
shopping_results 쇼핑 검색 결과
local_results 지역 검색 결과
video_results 비디오 검색 결과

2. 필터 및 정렬 옵션

params = {
    "q": "Python tutorial",
    "engine": "google",
    "api_key": API_KEY,
    "tbs": "qdr:d",  # 최근 24시간
    "sort": "relevance",  # 정렬 기준
}

3. 위치 및 언어 설정

params = {
    "q": "coffee shop",
    "engine": "google",
    "api_key": API_KEY,
    "gl": "us",  # 국가
    "hl": "en",  # 언어
    "location": "California, United States",  # 위치
}

무료 티어 활용하기

무료 플랜 제한

항목 무료 플랜
월간 요청 횟수 250회
검색 엔진 Google, Bing 등
스크린샷 제한적
동시 요청 1개
지원 이메일 지원

무료로 최대한 활용하는 팁

  1. 필요한 데이터만 요청:불필요한 필드 요청을 줄여 효율적으로 사용
  2. 캐싱 활용:같은 쿼리는 결과를 저장하여 중복 요청 방지
  3. 배치 처리:여러 쿼리를 하나로 묶어 처리
  4. 개발 환경 분리:테스트용과 프로덕션용 분리
import requests
from functools import lru_cache

API_KEY = "your_api_key_here"

# 캐싱을 통한 중복 요청 방지
@lru_cache(maxsize=100)
def search_with_cache(query, num=10):
    url = f"https://serpapi.com/search?q={query}&engine=google&num={num}&api_key={API_KEY}"
    response = requests.get(url)
    return response.json()

# 테스트
result = search_with_cache("Django REST Framework")
print(f"총 결과 수: {len(result.get('organic_results', []))}")

실제 사용 사례

1. SEO 모니터링

def track_keyword_rankings(keywords, target_domain):
    results = []
    for keyword in keywords:
        data = search_with_cache(keyword)
        for i, result in enumerate(data.get("organic_results", []), 1):
            if target_domain in result.get("link", ""):
                results.append({
                    "keyword": keyword,
                    "rank": i,
                    "title": result.get("title"),
                    "url": result.get("link")
                })
                break
    return results

# 사용 예시
keywords = ["Django tutorial", "Python web framework", "REST API Django"]
rankings = track_keyword_rankings(keywords, "example.com")
for r in rankings:
    print(f"Keyword: {r['keyword']}, Rank: {r['rank']}")

2. 경쟁사 분석

def analyze_competitors(query, competitors):
    data = search_with_cache(query)
    analysis = {}
    
    for comp in competitors:
        count = 0
        for result in data.get("organic_results", []):
            if comp.lower() in result.get("link", "").lower():
                count += 1
        analysis[comp] = count
    
    return analysis

# 사용 예시
competitors = ["github.com", "stackoverflow.com", "medium.com"]
result = analyze_competitors("Python Django", competitors)
print(result)

가격 정책

플랜 월간 비용 요청 횟수 특징
Free $0 250회/월 기본 기능
Starter $50 5,000회/월 스크린샷 포함
Standard $100 15,000회/월 모든 기능
Professional $200 30,000회/월 우선 지원
Enterprise 맞춤가 무제한 커스텀 지원

결론

직접 Google 검색을 크롤링하다 보면 IP 차단, 구조 변화, CAPTCHA 등 다양한 문제에 직면합니다. SerpAPI는 이러한 문제를 해결하고 안정적으로 검색 결과를 가져올 수 있는 대안을 제공합니다.

특히 월 250회 무료로試해볼 수 있으므로, 직접 크롤링에서 어려움을 겪고 계신다면 SerpAPI를検討해보세요. 스크린샷 기능까지 제공되므로 시각적인 분석이 필요한 경우에도 유용합니다.

다음 포스트에서는 SerpAPI를 활용한 더 구체적인 자동화 사례를 다뤄보겠습니다.


참고: SerpAPI 가격 및 기능은 변경될 수 있습니다. 공식 웹사이트를 확인하세요.

이 글을 공유해보세요!