Scarnox · Blog

Cloudflare로 보호된 사이트를 스크래핑하는 방법 (2026 가이드)

Cloudflare는 공개 웹의 상당 부분 앞에 놓여 있으므로, 한 사이트에서 잘 작동하던 스크래퍼가 다음 사이트에서 벽에 부딪히는 일이 흔합니다. 보통 HTTP 403이나 503, "Just a moment..." 중간 페이지, 또는 페이지의 Turnstile 체크박스로 알아차리게 됩니다. 이 가이드는 Cloudflare가 무엇을 검사하는지, 건드리지 말아야 할 것을 건드리지 않고 효과가 있는 해결책은 무엇인지, 그리고 captcha 풀이가 어디에 들어맞는지 설명합니다. 짧게 말하면 이렇습니다. 사이트를 스크래핑해도 되는지 확인하고, 속도를 늦추고, 일반 클라이언트처럼 보이는 요청을 보내고, 페이지에 JavaScript가 필요하면 실제 브라우저를 쓰고, 그 뒤에야 captcha를 다루세요. Turnstile은 Cloudflare가 가장 자주 쓰는 captcha입니다. Scarnox의 Turnstile 지원은 출시 예정입니다. 오늘 실시간으로 제공되는 captcha 유형은 PopularCaptcha입니다.

Cloudflare가 검사하는 것

Cloudflare는 여러 신호로 모든 요청에 점수를 매깁니다.

높은 점수는 조용히 통과합니다. 중간 점수는 대화형 챌린지를 받습니다. 낮은 점수는 차단됩니다. 대부분의 작업은 검사와 싸우는 것이 아니라, 얌전한 클라이언트처럼 행동해서 점수를 올리는 것입니다.

1단계: 사이트를 스크래핑해도 되는지 확인하기

기술 작업을 하기 전에, 사이트의 robots.txt와 이용 약관을 읽으세요. 차단은 종종 소유자가 여러분에게 무언가를 말하는 것입니다. 명확한 목적을 위해 공개 페이지를 천천히 스크래핑하는 것은 하나의 일입니다. 소유자가 제한한 데이터에 닿기 위해 차단을 강제로 뚫는 것은 다른 일이며, Scarnox가 지원하지 않는 용도입니다. 일반적인 질문은 법적 개요에서 다룹니다.

2단계: 기본 요청을 제대로 보내기

"차단된" 것으로 보이는 많은 스크래퍼는 단순히 나쁜 요청을 보내고 있을 뿐입니다. 이것부터 고치세요.

import random
import time
import requests

session = requests.Session()
session.headers.update({
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
                  "(KHTML, like Gecko) Chrome/124.0 Safari/537.36",
    "Accept-Language": "en-US,en;q=0.9",
})

def polite_get(url: str, attempts: int = 4) -> requests.Response:
    r = None
    for attempt in range(attempts):
        r = session.get(url, timeout=30)
        if r.status_code not in (429, 503):
            return r
        # 지터를 더한 지수 백오프: 약 1, 2, 4초에 잡음을 더합니다.
        time.sleep(2 ** attempt + random.uniform(0, 1))
    return r

이것으로 통과한다면 끝입니다. 지연은 그대로 유지하세요.

3단계: 어떤 챌린지인지 파악하기

응답은 많은 것을 알려 줍니다.

어떤 것을 마주했는지 확인하면 낭비되는 노력을 많이 줄일 수 있습니다.

4단계: 페이지가 필요로 할 때 실제 브라우저 쓰기

페이지가 JavaScript가 실행된 뒤에야 콘텐츠를 보여 준다면, 일반 HTTP 클라이언트는 그것을 절대 보지 못합니다. 대신 Playwright나 Selenium으로 완전한 브라우저를 구동하세요. 헤드리스 브라우저는 감지될 수 있으므로, 의존하기 전에 헤드리스 브라우저 감지를 읽고, 실제 방문자가 가질 환경과 맞도록 설정하세요. 완전한 예시는 JavaScript 사이트 가이드에 있습니다.

5단계: IP 평판 점검하기

깨끗한 요청이 낮은 점수를 받는 가장 흔한 이유는 클라우드 데이터센터 주소입니다. 주거용 주소는 보통 더 나은 점수를 받지만, 속도와 비용이 더 듭니다. 그 트레이드오프는 주거용 vs 데이터센터 프록시에서 다룹니다.

회전에도 고유한 함정이 있습니다. 요청마다 주소를 바꾸면 부자연스러워 보입니다. 실제 방문자는 한 번의 방문 동안 하나의 주소를 유지하기 때문입니다. 관련된 요청 묶음에 하나의 주소를 유지하는 고정 세션이 빠른 회전보다 나은 경우가 많습니다. 자세한 내용은 스크래핑용 회전 프록시에 있습니다.

6단계: captcha 풀이가 들어맞는 곳

때로는 위젯이 실제로 나타납니다. 테스트 중인 폼이나 자동화 허가를 받은 페이지에서 그렇습니다. 그럴 때 Turnstile 토큰은 그 흐름에서 필수 단계가 됩니다. Scarnox의 Turnstile 지원은 출시 예정이므로, 아직 운영 코드를 그것에 맞춰 만들지 마세요. 오늘 실시간으로 제공되는 captcha 유형은 PopularCaptcha이며, 이는 다른 위젯을 사용합니다.

토큰 기반 captcha의 일반적인 작업 흐름은 모두 같습니다. 페이지에서 sitekey를 읽고, 토큰을 요청하고, 사이트가 기대하는 폼 필드에 토큰을 넣습니다. 토큰은 수명이 짧으므로 즉시 제출하세요. PopularCaptcha Python 가이드가 그 흐름을 끝까지 보여 주며, captcha 유형 설명은 여러분이 마주칠 위젯들을 비교합니다.

Turnstile 지원이 출시될 때 준비되어 있고 싶다면, 지금 무료 체험을 시작할 수 있습니다. 무료 체험 크레딧으로 카드 없이 시작하세요. 계정을 만들면 됩니다. 실시간 captcha 유형의 현재 요금은 요금 페이지에서 확인하세요.

책임 있게 스크래핑하기

다음 단계