브라우저 없이 Cloudflare를 우회하는 Rust 웹 스크래퍼를 만들었습니다
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 워크스페이스입니다:
| Crate | Purpose |
|---|---|
webclaw-core | 순수 추출, 네트워크 의존성 없음, WASM‑안전 |
webclaw-fetch | primp를 통한 HTTP + TLS 지문 채취 |
webclaw-llm | LLM 제공자 체인 (Ollama → OpenAI → Anthropic) |
webclaw-pdf | PDF 텍스트 추출 |
webclaw-cli | CLI 바이너리 |
webclaw-mcp | AI 에이전트를 위한 MCP 서버 |
core와 fetch 사이의 분리는 의도된 설계입니다: webclaw-core는 HTML의 &str를 받아 I/O 없이 구조화된 출력을 반환하므로 WASM으로 쉽게 컴파일할 수 있습니다.
성능
코어 추출 속도 (네트워크 없음)
| 페이지 크기 | 시간 |
|---|---|
| 10 KB | 0.8 ms |
| 100 KB | 3.2 ms |
| 500 KB | 12.1 ms |
벤치마크 비교
| 지표 | webclaw | trafilatura | newspaper3k |
|---|---|---|---|
| 추출 정확도 | 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은 암호 스위트와 확장 기능을 정기적으로 업데이트합니다.
webclaw는 primp에 의존하며, 이는rustls,hyper,h2의 패치된 포크를 유지합니다. Chrome이 새로운 TLS 확장을 출시하면 포크가 업데이트될 때까지 요청이 차단될 수 있습니다. - 추출 점수는 광범위한 반복이 필요했습니다. 초기 버전은 링크가 포함된 짧은 단락을 과도하게 제거했습니다. 현재 접근 방식은 시맨틱 보너스를 추가합니다:
또는태그 내부에 있거나 콘텐츠와 관련된 클래스 이름을 가진 노드는 점수가 상승하고, 링크 밀도가 높으면 패널티가 부여됩니다. 이 휴리스틱은 사이트별 규칙 없이 대부분의 레이아웃에서 작동합니다.
라이선스 및 기여
webclaw는 MIT 라이선스이며 완전 오픈 소스입니다.
- GitHub:
- 웹사이트:
- 디스코드:
webclaw가 실패하는 사이트를 발견하면, 이슈를 열어 주세요—각각의 엣지 케이스가 추출기를 개선합니다.