ko
English
Español
中國人
Tiếng Việt
Deutsch
Українська
Português
Français
भारतीय
Türkçe
Italiano
Gaeilge
اردو
Indonesia
Polski CloudScraper는 HTTP 요청을 자동화하고 Cloudflare와 같은 추가 트래픽 유효성 검사를 적용하는 웹 리소스와 상호 작용하기 위한 모듈입니다. CloudScraper 프록시는 연결을 관리하고, 요청에 대한 네트워크 매개변수를 설정하고, IP, 헤더 및 클라이언트 동작을 검사하는 사이트에서 액세스를 안정적으로 유지하는 데 도움이 됩니다.
CloudScraper는 Python으로 구현되며 요청 라이브러리 위에 구축됩니다. 기본 HTTP 클라이언트와 달리 브라우저와 유사한 동작을 에뮬레이션하여 자바스크립트 체크포인트가 있는 챌린지 페이지를 자동으로 처리할 수 있습니다. 이 모듈은 필요한 헤더를 추가하고 쿠키를 관리하며 리디렉션을 따르고 일반적인 보호 메커니즘에 대응할 수 있습니다(CAPTCHA가 포함되지 않는 경우).
실제로 개발자들은 IP 차단을 최소화하면서 데이터 추출 프로세스를 간소화하기 위해 웹 스크래핑 API로 사용하는 경우가 많습니다.
CloudScraper 프록시를 사용하면 다음과 같이 할 수 있습니다:
라이브러리는 전체 브라우저를 실행하지 않고도 실행되며, 경우에 따라 Puppeteer 또는 Playwright와 같은 헤드리스 도구를 대체할 수 있습니다.
Cloudflare는 자동화된 트래픽에 대해 여러 계층의 보호 기능을 사용하며, 이를 통칭하여 안티 봇 보호라고 합니다. 여기에는 JavaScript 챌린지, HTTP 리디렉션, 헤더 검사, 쿠키 토큰, IP 기반 제한이 포함됩니다. 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?...">
이 경우 두 가지 가능한 솔루션 접근 방식이 있습니다:
captcha_data = {
'method': 'userrecaptcha',
'googlekey': 'SITE_KEY',
'pageurl': 'https://example.com',
'key': 'API_KEY_ANTICAPTCHA'
} 적당한 요청 속도에서도 캡차가 표시된다면 캡차를 사용하는 것이 좋습니다:
보호된 리소스로 작업할 때 IP 주소의 품질은 매우 중요한 요소입니다. CloudScraper의 안정적인 프록시(주거용, 모바일, ISP 또는 데이터센터)는 캡차 발생 가능성을 줄이고 안정적인 세션 성능을 보장하는 데 도움이 됩니다. 다양한 프록시 유형 간의 차이점과 특정 작업에 가장 적합한 솔루션을 선택하는 방법을 알아보려면 다음을 참조하세요 이 문서.
이 모듈은 Cloudflare 우회와 관련된 많은 작업을 해결하지만, 경우에 따라 더 전문적이거나 특정 보호 조건에 맞춘 다른 접근 방식이 필요할 수 있습니다.
다음은 몇 가지 일반적인 대안입니다:
솔루션 비교:
| 기능 / 도구 | CloudScraper | Requests+cookies | Puppeteer | Playwright |
|---|---|---|---|---|
| 구현 복잡성 | 낮음 | Medium | 높음 | 높음 |
| 성능 속도 | 높음 | 높음 | Medium | Medium |
| 수표에 대한 저항 | Medium | 낮음 | 높음 | 최대 |
| 캡차 서비스 통합 | 예(API를 통해) | 아니요 | 예(플러그인/API를 통해) | 예(플러그인/API를 통해) |
| 자바스크립트 실행 | 부분 | 아니요 | 예 | 예 |
| 리소스 소비 | 낮음 | 낮음 | 높음 | 높음 |
올바른 설정이 되어 있더라도 원인을 파악하면 쉽게 진단하고 해결할 수 있는 기술적 문제가 CloudScraper에 발생할 수 있습니다.
요청을 처리할 때 SSL 인증서에 문제가 있음을 나타내는 메시지가 표시될 수 있습니다. 이는 대부분 만료된 인증서 또는 잘못된 시스템 날짜로 인해 확인에 실패했음을 나타냅니다.
해결 방법
scraper.get(url, verify=False)
이 코드는 인증서 유효성 검사를 비활성화하여 SSL 확인 오류를 일시적으로 우회하는 방법을 보여줍니다. 이 방법은 진단에는 유용하지만 영구적으로 사용하기에는 안전하지 않습니다.
브라우저에서 URL에 액세스할 수 있는데도 서버가 403 오류와 함께 호출을 거부합니다. 이는 보호 기능이 이러한 시도를 자동화된 것으로 식별할 때 발생합니다.
문제 해결 방법
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)입니다.
문제 해결 방법
그래도 문제가 해결되지 않으면 헤드리스 브라우저로 전환하는 것이 좋습니다.
호출을 보낼 때 페이지 간에 반복되는 리디렉션이 관찰됩니다. 콘텐츠가 로드되지 않고 대상 페이지에 도달하지 않고 요청 줄이 여러 번 변경됩니다.
이 경우 보호 통과가 완료되지 않았기 때문에 사용자는 인증 페이지로 다시 리디렉션됩니다. 이는 시도 사이에 쿠키가 저장되지 않거나 탐색 중에 세션이 손실된 경우에 발생할 수 있습니다.
해결 단계
import cloudscraper
scraper = cloudscraper.create_scraper()
response1 = scraper.get("https://example.com/start")
response2 = scraper.get("https://example.com/continue")
print(response2.status_code) 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 프록시를 사용할 때 특히 중요합니다.
어떤 시도는 성공하지만 다른 시도는 연결 오류나 시간 초과로 실패합니다. 이는 종종 품질이 낮은 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는 HTTP 요청 수준에서 작동하며 전체 브라우저 동작을 재현하지 않습니다. 헤더로 자신을 마스킹할 수는 있지만 사용자 행동이나 브라우저 지문을 에뮬레이션할 수는 없습니다. 행동 중심 검사의 경우, Playwright 또는 Puppeteer와 같은 헤드리스 도구를 사용하세요.
예. 세션을 격리하고, 프록시 풀을 사용하고, 예외를 적절히 처리합니다. 스레드당 전용 세션을 만듭니다. 연결 오류(시간 초과, 프록시 오류, 403 금지됨, 429 너무 많은 요청)가 발생하면 프록시를 로테이션합니다.
CloudScraper는 빠른 통합이 중요한 중소규모 프로젝트에 적합합니다. 미션 크리티컬하고 부하가 많은 시스템의 경우 확장성이 뛰어난 솔루션(예: Playwright) 또는 사용자 정의 브라우저 기반 스택을 고려하세요.
댓글: 0