초보자 가이드 - CloudScraper 프록시를 효과적으로 사용하는 방법

댓글: 0

CloudScraper는 HTTP 요청을 자동화하고 Cloudflare와 같은 추가 트래픽 유효성 검사를 적용하는 웹 리소스와 상호 작용하기 위한 모듈입니다. CloudScraper 프록시는 연결을 관리하고, 요청에 대한 네트워크 매개변수를 설정하고, IP, 헤더 및 클라이언트 동작을 검사하는 사이트에서 액세스를 안정적으로 유지하는 데 도움이 됩니다.

라이브러리 작동 방식과 CloudScraper에서 프록시가 도움이 되는 이유

CloudScraper는 Python으로 구현되며 요청 라이브러리 위에 구축됩니다. 기본 HTTP 클라이언트와 달리 브라우저와 유사한 동작을 에뮬레이션하여 자바스크립트 체크포인트가 있는 챌린지 페이지를 자동으로 처리할 수 있습니다. 이 모듈은 필요한 헤더를 추가하고 쿠키를 관리하며 리디렉션을 따르고 일반적인 보호 메커니즘에 대응할 수 있습니다(CAPTCHA가 포함되지 않는 경우).

실제로 개발자들은 IP 차단을 최소화하면서 데이터 추출 프로세스를 간소화하기 위해 웹 스크래핑 API로 사용하는 경우가 많습니다.

CloudScraper 프록시를 사용하면 다음과 같이 할 수 있습니다:

  • 소스 IP 주소를 회전합니다;
  • 다른 지역의 연결을 시뮬레이션합니다;
  • 높은 통화량을 안정적으로 유지합니다;
  • 보안 및 익명 세션을 위해 프록시를 인증합니다.

라이브러리는 전체 브라우저를 실행하지 않고도 실행되며, 경우에 따라 Puppeteer 또는 Playwright와 같은 헤드리스 도구를 대체할 수 있습니다.

CloudScraper가 Cloudflare 보호와 상호 작용하는 방법

Cloudflare는 자동화된 트래픽에 대해 여러 계층의 보호 기능을 사용하며, 이를 통칭하여 안티 봇 보호라고 합니다. 여기에는 JavaScript 챌린지, HTTP 리디렉션, 헤더 검사, 쿠키 토큰, IP 기반 제한이 포함됩니다. CloudScraper는 유효성 검사 메커니즘을 감지하고 적절한 처리 전략을 적용합니다.

  • 자바스크립트 문제. 이 모듈은 내장된 JS를 해석하고 브라우저를 에뮬레이션하여 확인이 완료될 때까지 기다립니다.
  • 리디렉션(301/302). HTTP 세션 수준에서 자동으로 처리되므로 별도의 조치가 필요하지 않습니다.
  • 헤더(사용자-에이전트 및 기타). 기본적으로 라이브러리에 의해 설정되지만 필요한 경우 재정의할 수 있습니다.
  • 쿠키 토큰. 챌린지를 통과한 후 설정되며 이후 시도를 위해 세션 내에 저장됩니다.

Python에서 CloudScraper 사용

크로스 플랫폼이며 정기적으로 업데이트되며 Windows, Linux 및 macOS와 호환됩니다. 가상 환경과 그래픽 인터페이스가 없는 서버에서 작동합니다. 또한 개발자는 프록시를 빠르게 통합하여 액세스 제어 및 안정성을 향상시킬 수 있습니다.

설치

시작하려면 Python 버전 3.6 이상이 설치되어 있어야 합니다. 단일 명령으로 모듈을 연결할 수 있고 어떤 환경에서도 즉시 작동할 수 있기 때문에 Python에서 CloudScraper를 사용하는 것이 편리합니다.

이 도구는 공식 PyPI 리포지토리에서 타사 라이브러리를 다운로드하고 업데이트할 수 있는 표준 Python 패키지 관리자 pip를 통해 설치됩니다. 가상 환경을 사용하는 경우 설치하기 전에 가상 환경이 활성화되어 있는지 확인하세요.

pip install cloudscraper

설치하는 동안 라이브러리는 요청, 구문 분석 및 요청-도구 벨트와 같은 주요 종속성을 자동으로 가져옵니다. 필요한 경우 수동으로 업데이트할 수 있습니다:

pip install --upgrade requests pyparsing requests-toolbelt

설치가 올바르게 완료되었는지 확인하려면 다음 테스트 스크립트를 실행하면 됩니다:

import cloudscraper

scraper = cloudscraper.create_scraper()
response = scraper.get("https://www.cloudflare.com")
print(response.status_code)

스크립트가 상태 코드 200, 301 또는 302를 반환하면 연결에 성공했으며 서버로부터 응답을 받은 것입니다.

보호된 페이지에 대한 요청 예시

아래 예는 모듈을 사용하여 Windows의 Chrome 브라우저에 해당하는 환경 매개 변수를 지정하여 보호된 페이지로 시도를 전송하는 방법을 보여줍니다.

이는 헤더를 올바르게 생성하고 세션을 성공적으로 설정할 가능성을 높이기 위해 필요합니다:

import cloudscraper

url = "https://example.com/protected"

scraper = cloudscraper.create_scraper(
    browser={
        'browser': 'chrome',
        'platform': 'windows',
        'mobile': False
    }
)

response = scraper.get(url)

if response.status_code == 200:
    print("Access granted.")
    print(response.text[:500])
elif response.status_code == 403:
    print("Request denied. Check proxy or headers.")
else:
    print(f"Response code: {response.status_code}")

이러한 매개변수를 기반으로 모듈은 적절한 사용자 에이전트 및 기타 주요 헤더를 대체하여 챌린지를 올바르게 처리하고 페이지 콘텐츠를 검색할 수 있도록 합니다.

프록시 통합

CloudScraper 프록시 서버를 사용하는 경우 요청 라이브러리에서 사용하는 형식과 유사한 표준 형식의 프록시 사전으로 매개 변수를 수락합니다. 이를 통해 개발자는 여러 요청에 동일한 프록시를 사용할 수 있으므로 일관된 IP 처리와 세션 안정성을 보장할 수 있습니다.

요청을 실행할 때 프록시 서버 매개변수를 전달하는 방법의 예시입니다:

proxies = {
'http': 'http://user:pass@proxy.server:port',
'https': 'http://user:pass@proxy.server:port'
}

scraper = cloudscraper.create_scraper()
response = scraper.get(url, proxies=proxies)

IP, 지역 또는 통화 빈도별로 액세스를 제한하는 리소스로 작업할 때는 CloudScraper 프록시 서버를 사용하는 것이 좋습니다. 부하를 분산하고, 원하는 지역의 트래픽을 시뮬레이션하며, 액세스 안정성을 개선하는 데 도움이 됩니다.

클라우드 스크레이퍼 캡차

보호 기능과 상호 작용하는 고급 메커니즘에도 불구하고 CloudScraper는 자동으로 캡차를 처리하지 않습니다. 이는 대화형 보안 문자 및 그래픽 보안 문자에 적용됩니다. 라이브러리는 해당 콘텐츠를 인식하지 못하므로 이러한 양식에 대한 응답을 생성할 수 없습니다.

예를 들어 보안 문자가 있는 페이지를 검색할 때 모듈은 해당 요소가 포함된 HTML을 반환합니다:

<iframe src="https://www.google.com/recaptcha/api2/anchor?...">

이 경우 두 가지 가능한 솔루션 접근 방식이 있습니다:

  • 보안 문자 서비스(예: 2Captcha, Capmonster, 안티캡차 등)와 통합. 이를 통해 사이트키와 페이지 URL을 전송할 수 있으며, 그 대가로 제출을 위한 준비된 토큰을 받을 수 있습니다.
    captcha_data = {
        'method': 'userrecaptcha',
        'googlekey': 'SITE_KEY',
        'pageurl': 'https://example.com',
        'key': 'API_KEY_ANTICAPTCHA'
    }
  • 자동 캡차 해결을 지원하는 플러그인과 함께 헤드리스 브라우저(예: Puppeteer 또는 Playwright)를 사용합니다. 이렇게 하면 전체 사용자 행동을 에뮬레이션할 수 있습니다.

적당한 요청 속도에서도 캡차가 표시된다면 캡차를 사용하는 것이 좋습니다:

  • 시도 사이의 지연 시간을 늘립니다;
  • 환경 지문을 변경합니다;
  • 예를 들어 브라우저 자동화로 전환하는 등 전략을 재고하세요.

보호된 리소스로 작업할 때 IP 주소의 품질은 매우 중요한 요소입니다. CloudScraper의 안정적인 프록시(주거용, 모바일, ISP 또는 데이터센터)는 캡차 발생 가능성을 줄이고 안정적인 세션 성능을 보장하는 데 도움이 됩니다. 다양한 프록시 유형 간의 차이점과 특정 작업에 가장 적합한 솔루션을 선택하는 방법을 알아보려면 다음을 참조하세요 이 문서.

고려해야 할 CloudScraper 대안

이 모듈은 Cloudflare 우회와 관련된 많은 작업을 해결하지만, 경우에 따라 더 전문적이거나 특정 보호 조건에 맞춘 다른 접근 방식이 필요할 수 있습니다.

다음은 몇 가지 일반적인 대안입니다:

  • 수동으로 획득한 승인 쿠키를 사용한 요청. 한 번의 호출로 충분할 때 사용합니다. 브라우저에서 수동으로 토큰을 추출하고 세션이 변경될 때 후속 업데이트가 필요합니다.
  • Puppeteer. 실제 사용자 동작을 에뮬레이트하는 Node.js 기반의 헤드리스 브라우저입니다. 정밀한 자바스크립트 처리, 보안 문자, DOM 구조 처리가 필요한 작업에 적합합니다. 리소스를 더 많이 소비하지만 더 안정적입니다.
  • Playwright. 여러 브라우저 엔진(크롬, 파이어폭스, 웹킷)을 지원하는 CloudScraper의 보다 유연한 대안입니다. 확장성이 뛰어나며 대부분의 검증 메커니즘을 성공적으로 처리합니다.

솔루션 비교:

기능 / 도구 CloudScraper Requests+cookies Puppeteer Playwright
구현 복잡성 낮음 Medium 높음 높음
성능 속도 높음 높음 Medium Medium
수표에 대한 저항 Medium 낮음 높음 최대
캡차 서비스 통합 예(API를 통해) 아니요 예(플러그인/API를 통해) 예(플러그인/API를 통해)
자바스크립트 실행 부분 아니요
리소스 소비 낮음 낮음 높음 높음

CloudScraper 프록시 사용 시 일반적인 오류 및 수정 사항

올바른 설정이 되어 있더라도 원인을 파악하면 쉽게 진단하고 해결할 수 있는 기술적 문제가 CloudScraper에 발생할 수 있습니다.

SSL: 인증서_확인_실패

요청을 처리할 때 SSL 인증서에 문제가 있음을 나타내는 메시지가 표시될 수 있습니다. 이는 대부분 만료된 인증서 또는 잘못된 시스템 날짜로 인해 확인에 실패했음을 나타냅니다.

해결 방법

  • pip install --upgrade certifi 명령으로 인증 패키지를 업데이트합니다.
  • 디바이스에서 시스템 날짜와 시간을 확인하고 필요한 경우 수정합니다.
  • SSL 확인을 일시적으로 비활성화합니다(디버깅 전용).
scraper.get(url, verify=False)

이 코드는 인증서 유효성 검사를 비활성화하여 SSL 확인 오류를 일시적으로 우회하는 방법을 보여줍니다. 이 방법은 진단에는 유용하지만 영구적으로 사용하기에는 안전하지 않습니다.

403 금지됨

브라우저에서 URL에 액세스할 수 있는데도 서버가 403 오류와 함께 호출을 거부합니다. 이는 보호 기능이 이러한 시도를 자동화된 것으로 식별할 때 발생합니다.

문제 해결 방법

  1. 최신 브라우저의 헤더와 동일한 현재 사용자 에이전트를 설정합니다.
  2. 누락된 헤더 추가 - 참조자, 수락 언어, 수락 인코딩.
mport cloudscraper

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.199 Safari/537.36',
    'Referer': 'https://example.com',
    'Accept-Language': 'en-US,en;q=0.9',
    'Accept-Encoding': 'gzip, deflate, br'
}

scraper = cloudscraper.create_scraper()
response = scraper.get("https://example.com", headers=headers)

print(response.status_code)

참고: 사용자 에이전트가 헤더를 통해 수동으로 설정된 경우 세션을 만들 때 브라우저 매개변수는 필요하지 않으며 덮어쓰기됩니다.

또한 사용 중인 프록시를 확인하고 필요한 경우 IP를 변경하거나 다른 지역의 중간 서버를 선택해야 합니다.

지원되지 않는 도전 과제

모듈에서 반환된 챌린지 페이지를 처리할 수 없어 빈 HTML 또는 오류 메시지가 표시됩니다. 이유 - 라이브러리에서 지원하지 않는 보호 유형(예: hCaptcha 또는 Turnstile)입니다.

문제 해결 방법

  • 모듈이 최신 버전으로 업데이트되었는지 확인하세요.
  • 덜 엄격한 보호 기능을 갖춘 대체 리소스를 선택하세요.

그래도 문제가 해결되지 않으면 헤드리스 브라우저로 전환하는 것이 좋습니다.

리디렉션 루프

호출을 보낼 때 페이지 간에 반복되는 리디렉션이 관찰됩니다. 콘텐츠가 로드되지 않고 대상 페이지에 도달하지 않고 요청 줄이 여러 번 변경됩니다.

이 경우 보호 통과가 완료되지 않았기 때문에 사용자는 인증 페이지로 다시 리디렉션됩니다. 이는 시도 사이에 쿠키가 저장되지 않거나 탐색 중에 세션이 손실된 경우에 발생할 수 있습니다.

해결 단계

  1. 모듈의 세션 객체를 사용하여 시도 사이에 쿠키를 저장합니다.
    import cloudscraper
    
    scraper = cloudscraper.create_scraper()
    
    response1 = scraper.get("https://example.com/start")
    
    response2 = scraper.get("https://example.com/continue")
    
    print(response2.status_code)
  2. time.sleep을 사용하여 시도 사이에 약간의 지연 시간을 추가합니다.
    import time
    import cloudscraper
    
    scraper = cloudscraper.create_scraper()
    response1 = scraper.get("https://example.com/start")
    
    time.sleep(2)
    
    response2 = scraper.get("https://example.com/continue")

지연을 추가하면 통화 빈도가 너무 높아 서버가 트래픽을 자동화된 것으로 분류하는 상황을 방지하는 데 도움이 됩니다. 지연은 세션 안정성을 개선하고 필터가 트리거될 가능성을 줄여주기 때문에 CloudScraper 프록시를 사용할 때 특히 중요합니다.

CloudScraper 프록시의 불안정한 동작

어떤 시도는 성공하지만 다른 시도는 연결 오류나 시간 초과로 실패합니다. 이는 종종 품질이 낮은 IP를 가리킵니다.

완화:

  • 선호 주거용, 모바일 또는 ISP 프록시.
  • 풀에서 무료/공용 IP를 제외하세요.
  • 로깅을 활성화하고 자동 프록시 로테이션을 구현합니다.

로깅은 프록시 서버를 통해 연결할 때 모듈의 작동(요청, 상태 코드, 오류 유형)을 추적하는 데 도움이 됩니다. 예를 들어 파이썬에서는 표준 로깅 모듈을 사용하여 이 작업을 수행합니다:

import logging
import cloudscraper

# basic file logging
logging.basicConfig(
    filename="scraper.log",
    level=logging.INFO,
    format="%(asctime)s - %(levelname)s - %(message)s"
)

scraper = cloudscraper.create_scraper()

try:
    response = scraper.get("https://example.com")
    logging.info(f"Request successful, status: {response.status_code}")
except Exception as e:
    logging.error(f"Request error: {e}")

이렇게 하면 오류 및 성공 시도에 대한 로그가 생성되어 어떤 CloudScraper 프록시가 언제 실패했는지 확인할 수 있습니다.

프록시가 403, 시간 초과, SSL 오류 등을 반환하기 시작하면 다음을 구현해야 합니다. IP 로테이션. 예를 들어 프록시 풀을 사용하고 장애 발생 시 사용 가능한 다음 서버로 폴백합니다:

import cloudscraper

proxies_list = [
    "http://user:pass@proxy1:port",
    "http://user:pass@proxy2:port",
    "http://user:pass@proxy3:port"
]

url = "https://example.com"
scraper = cloudscraper.create_scraper()

for proxy in proxies_list:
    try:
        response = scraper.get(url, proxies={"http": proxy, "https": proxy}, timeout=10)
        if response.status_code == 200:
            print("Success via:", proxy)
            break
    except Exception as e:
        print("Error on", proxy, "-", e)

결과적으로 요청은 풀에서 사용 가능한 첫 번째 프록시를 통해 실행되므로 작동하지 않는 주소를 피하는 데 도움이 됩니다.

결론

CloudScraper 프록시를 사용하면 연결 수준 보호 기능이 있는 사이트에 대한 호출을 자동화하는 데 도움이 됩니다. 오류는 일반적으로 불안정한 프록시, 높은 시도율 또는 CAPTCHA로 인해 발생합니다. 실제적인 해결 방법으로는 안정적인 IP 사용, 헤더 조정, 요청 빈도 관리 등이 있습니다.

자주 묻는 질문

CloudScraper를 탐지 방지 브라우저 또는 지문 에뮬레이션과 함께 사용할 수 있나요?

아니요. CloudScraper는 HTTP 요청 수준에서 작동하며 전체 브라우저 동작을 재현하지 않습니다. 헤더로 자신을 마스킹할 수는 있지만 사용자 행동이나 브라우저 지문을 에뮬레이션할 수는 없습니다. 행동 중심 검사의 경우, Playwright 또는 Puppeteer와 같은 헤드리스 도구를 사용하세요.

멀티스레드 설정에서 CloudScraper 프록시 서버를 사용할 수 있나요?

예. 세션을 격리하고, 프록시 풀을 사용하고, 예외를 적절히 처리합니다. 스레드당 전용 세션을 만듭니다. 연결 오류(시간 초과, 프록시 오류, 403 금지됨, 429 너무 많은 요청)가 발생하면 프록시를 로테이션합니다.

프로덕션 시나리오에서 라이브러리를 신뢰할 수 있나요?

CloudScraper는 빠른 통합이 중요한 중소규모 프로젝트에 적합합니다. 미션 크리티컬하고 부하가 많은 시스템의 경우 확장성이 뛰어난 솔루션(예: Playwright) 또는 사용자 정의 브라우저 기반 스택을 고려하세요.

댓글:

0 댓글