Google SERP 스크래핑의 필요성
Google 검색 결과 스크래핑은 SEO 전문가, 마케터, 연구자에게 필수적입니다. 키워드 순위 추적, 경쟁사 분석, SERP 기능 모니터링 등에 활용됩니다.
하지만 Google은 자동화된 검색을 적극적으로 차단합니다. 프록시와 올바른 전략이 없으면 몇 번의 요청 후에 CAPTCHA에 직면합니다.
Google의 안티봇 방어
- CAPTCHA/reCAPTCHA — 의심스러운 트래픽에 챌린지 제시
- IP 기반 속도 제한 — 단일 IP의 과도한 검색 차단
- 데이터센터 IP 차단 — 알려진 호스팅 IP 범위 차단
- 행동 분석 — 비인간적 검색 패턴 감지
프록시 설정
from proxyhat import ProxyHat
import urllib.parse
client = ProxyHat(api_key="your_api_key")
def search_google(query, country="us", lang="en", num=10):
params = urllib.parse.urlencode({
"q": query, "num": num, "hl": lang, "gl": country
})
url = f"https://www.google.com/search?{params}"
response = client.get(url,
proxy_type="residential",
country=country.upper()
)
return response.text if response.status_code == 200 else None
검색 결과 파싱
from bs4 import BeautifulSoup
def parse_serp(html):
soup = BeautifulSoup(html, "html.parser")
results = []
for item in soup.select("div.g"):
title = item.select_one("h3")
link = item.select_one("a")
snippet = item.select_one("div.VwiC3b")
if title and link:
results.append({
"position": len(results) + 1,
"title": title.text,
"url": link["href"],
"snippet": snippet.text if snippet else ""
})
return results
지역별 결과 수집
SERP 추적에서는 다양한 지역의 결과를 수집해야 합니다. ProxyHat의 지역 타겟팅을 사용합니다:
locations = ["us", "gb", "de", "jp", "kr"]
for loc in locations:
html = search_google("proxy service", country=loc)
results = parse_serp(html)
save_results(loc, results)
CAPTCHA 방지 전략
- 요청 간격 — 최소 5-10초 간격 유지
- 레지덴셜 프록시 — 데이터센터 IP 사용 금지
- 지역 매칭 — 검색 지역과 프록시 위치 일치
- 점진적 스케일업 — 급격한 요청 증가 방지
- 쿠키 관리 — Google 쿠키를 적절히 처리





