브라우저 없이 Cloudflare를 우회하는 Rust 웹 스크래퍼를 만들었습니다

발행: (2026년 3월 24일 PM 08:39 GMT+9)
7 분 소요
원문: Dev.to

Source: Dev.to

모든 AI 에이전트는 같은 벽에 부딪힙니다: 웹 페이지를 요청하면 종종 403 오류가 반환되거나 탐색 바와 쿠키 배너가 가득한 거대한 페이로드가 반환됩니다.

문제

표준 HTTP 클라이언트는 Cloudflare, Akamai, DataDome과 같은 서비스에 의해 차단됩니다. 이 서비스들은 요청이 원본 서버에 도달하기 TLS 지문을 검사합니다.

일반적인 해결 방법

헤드리스 Chrome을 실행하면 작동하지만, 브라우저 용량이 약 500 MB 증가하고 페이지당 2–3 s 지연이 발생하며 여전히 노이즈가 많은 HTML을 반환합니다.

솔루션: webclaw

webclaw는 TLS 수준에서 최신 브라우저를 가장합니다. TCP 핸드셰이크, 암호 스위트 및 확장 기능이 Chrome 142를 모방하므로 대부분의 안티봇 시스템이 요청을 바로 받아들입니다.

가져온 후, 추출 엔진은 텍스트 밀도, 의미 태그, 링크‑대‑텍스트 비율을 기준으로 각 DOM 노드에 점수를 매겨 네비게이션, 광고, 푸터, 쿠키 배너를 제거합니다. 결과는 깔끔한 마크다운입니다.

예시 – 원시 HTML로 4 820 토큰인 뉴스 기사가 처리 후 1 590 토큰이 됩니다 (≈ 67 % 감소).

Source:

Architecture

webclaw은 6개의 크레이트로 구성된 Rust 워크스페이스입니다:

CratePurpose
webclaw-core순수 추출, 네트워크 의존성 없음, WASM‑안전
webclaw-fetchprimp를 통한 HTTP + TLS 지문 채취
webclaw-llmLLM 제공자 체인 (Ollama → OpenAI → Anthropic)
webclaw-pdfPDF 텍스트 추출
webclaw-cliCLI 바이너리
webclaw-mcpAI 에이전트를 위한 MCP 서버

corefetch 사이의 분리는 의도된 설계입니다: webclaw-core는 HTML의 &str를 받아 I/O 없이 구조화된 출력을 반환하므로 WASM으로 쉽게 컴파일할 수 있습니다.

성능

코어 추출 속도 (네트워크 없음)

페이지 크기시간
10 KB0.8 ms
100 KB3.2 ms
500 KB12.1 ms

벤치마크 비교

지표webclawtrafilaturanewspaper3k
추출 정확도95.1 %83 %80 %
노이즈 제거96.1 %79 %73 %

가장 큰 향상은 가시적인 DOM이 비어 있고 콘텐츠가 임베드된 JSON에 존재하는 JavaScript‑중심 사이트에서 나타납니다(예: __NEXT_DATA__, window.__data). webclaw데이터‑섬 추출기는 해당 데이터를 가져오지만, 많은 경쟁 제품은 아무것도 반환하지 않습니다.

사용법

# 기본 추출
webclaw https://example.com
# 다양한 출력 형식
webclaw https://example.com -f json
webclaw https://example.com -f llm
# 문서 사이트 크롤링 (깊이 2)
webclaw https://docs.example.com --crawl --depth 2
# LLM 프롬프트로 구조화된 데이터 추출
webclaw https://example.com --extract-prompt "get all pricing tiers"
# 페이지 변경 사항 추적
webclaw https://example.com -f json > snapshot.json
webclaw https://example.com --diff-with snapshot.json

원클릭 설정

npx create-webclaw

이 명령은 설치된 AI 도구를 감지하고 적절한 설정을 작성합니다. 재시작 후에는 스크레이프, 크롤, 검색, 추출, 요약, 브랜드, 차이점, 맵, 배치, 리서치 등 10가지 도구를 바로 사용할 수 있습니다.

Docker

docker run --rm ghcr.io/0xmassi/webclaw https://example.com

이미지는 128 MB에 불과하며 모든 머신에서 실행됩니다.

제한 사항 및 유지 관리

  • TLS 지문 인식은 취약합니다: Chrome은 암호 스위트와 확장 기능을 정기적으로 업데이트합니다. webclawprimp에 의존하며, 이는 rustls, hyper, h2의 패치된 포크를 유지합니다. Chrome이 새로운 TLS 확장을 출시하면 포크가 업데이트될 때까지 요청이 차단될 수 있습니다.
  • 추출 점수는 광범위한 반복이 필요했습니다. 초기 버전은 링크가 포함된 짧은 단락을 과도하게 제거했습니다. 현재 접근 방식은 시맨틱 보너스를 추가합니다: 또는 태그 내부에 있거나 콘텐츠와 관련된 클래스 이름을 가진 노드는 점수가 상승하고, 링크 밀도가 높으면 패널티가 부여됩니다. 이 휴리스틱은 사이트별 규칙 없이 대부분의 레이아웃에서 작동합니다.

라이선스 및 기여

webclawMIT 라이선스이며 완전 오픈 소스입니다.

  • GitHub:
  • 웹사이트:
  • 디스코드:

webclaw가 실패하는 사이트를 발견하면, 이슈를 열어 주세요—각각의 엣지 케이스가 추출기를 개선합니다.

0 조회
Back to Blog

관련 글

더 보기 »