# task-571.2: Scrapling 설치 + 크롤링 스킬 구축

## 한정승인 (Scoped Delegation)
제이회장님이 전체 Phase를 2팀에 한정승인. 각 Phase 완료 → .done → 즉시 다음 Phase 진행.

## 참조 문서
1. `memory/research/scrapling-analysis.md` — Scrapling 심층분석 보고서
2. `memory/reports/task-571.1.md` — Phase 1 완료 보고서 (browser.py 스텔스 강화)
3. `memory/tasks/task-571.1.md` — 마스터플랜 (전체 5 Phase)

## Phase 1 산출물 (이전 Phase)
- `/home/jay/workspace/scripts/browser.py` — 스텔스 모드 추가 완료 (STEALTH_ARGS 55개, browserforge, 리소스 차단)
- `/home/jay/workspace/scripts/tests/test_browser_stealth.py` — 11개 테스트

## 작업 항목

### 1. Scrapling 설치
- `pip install scrapling[all]` (curl_cffi, playwright, patchright, browserforge, mcp 등 전체 의존성)
- `scrapling install` (Chromium 바이너리 + TLD DB 설치)
- import 테스트: `from scrapling import Fetcher, StealthyFetcher`

### 2. 크롤링 유틸리티 모듈
경로: `/home/jay/workspace/scripts/crawl_utils.py`

구현 항목:
- Scrapling Fetcher/StealthyFetcher 래핑
- **N-1: 프록시 로테이션** — ProxyRotator 패턴 (프록시 리스트 → 라운드로빈/랜덤 선택)
- **N-2: 자동 재시도** — 실패 시 프록시 교체 + 재시도 (최대 3회, 지수 백오프)
- **N-3: 프록시 에러 판별** — 프록시 오류 vs 일반 오류 구분 (ConnectionError, ProxyError 등)
- 리소스 차단 설정 헬퍼
- HTML → Response 변환 편의 함수

### 3. 크롤링 스킬 SKILL.md
경로: `/home/jay/workspace/skills/advanced-crawling/SKILL.md`

내용:
- 3단계 Fetcher 사용 가이드 (Fetcher → DynamicFetcher → StealthyFetcher)
- Smart Matching 활용법 (auto_save, adaptive, find_similar)
- CSS/XPath 셀렉터 가이드 (::text, ::attr 의사요소)
- 프록시 로테이션 + 자동 재시도 사용법
- 리소스 차단 설정 가이드

### 4. P-5: 마크다운 변환
- HTML → Markdown 변환 유틸 (LLM 입력 최적화)
- markdownify 또는 직접 구현
- 노이즈 태그(script/style/noscript/svg) 제거

## 수정/생성 파일
- `/home/jay/workspace/scripts/crawl_utils.py` (신규)
- `/home/jay/workspace/scripts/tests/test_crawl_utils.py` (신규)
- `/home/jay/workspace/skills/advanced-crawling/SKILL.md` (신규)

## 완료 기준
- Scrapling 설치 확인 (import 테스트)
- crawl_utils.py + 테스트 (최소 8건)
- SKILL.md 작성
- pyright 에러 0건
- 기존 테스트 회귀 없음

## 보고서
`memory/reports/task-571.2.md`