# task-578.1: Spider 기반 정기 크롤링 시스템

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

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

## Phase 3 산출물 (이전 Phase)
- `/home/jay/workspace/scripts/insurance_crawler.py` — InsuranceCrawler 클래스 (267줄, Smart Matching, CSS추출, 테이블추출, LLM변환)
- `/home/jay/workspace/scripts/tests/test_insurance_crawler.py` — 33개 테스트
- `/home/jay/workspace/scripts/crawl_utils.py` — ProxyRotator, fetch_with_retry, html_to_markdown, clean_html
- Scrapling Smart Matching 동작 확인 (auto_save/adaptive/find_similar)

## 작업 항목

### 1. Spider 프레임워크 활용 (SP-1~SP-6)
- Scrapling의 Spider ABC 상속 크롤러 구현
- `start_urls` + `parse()` 콜백 패턴
- PriorityQueue + SHA-1 중복 필터 (SP-2)
- Checkpoint/재시작 (SP-3) — pickle 기반 자동 저장 + 복원
- 병렬 크롤링 (SP-4) — anyio TaskGroup 기반
- 도메인별 동시성 제어 (SP-5) — 예의 바른 크롤링 (download_delay, CapacityLimiter)
- JSON/JSONL 결과 내보내기 (SP-6)

### 2. 정기 크롤링 스케줄러 설계
- cokacdir --cron 연동 설계 (등록은 프로젝트 시작 시)
- 크롤링 결과 저장 경로/형식 정의

### 3. Response 이력 추적 (N-4)
- 리다이렉트 체인 전체 보존
- 디버깅/분석 편의를 위한 이력 저장

## 수정/생성 파일
- `/home/jay/workspace/scripts/insurance_spider.py` (신규) — Spider 기반 보험 크롤러
- `/home/jay/workspace/scripts/tests/test_insurance_spider.py` (신규)

## Scrapling Spider API 참고
```python
from scrapling.spiders import Spider

class InsuranceSpider(Spider):
    start_urls = ["https://example-insurance.co.kr/products"]

    async def parse(self, response):
        # 데이터 추출 로직
        yield {"name": "...", "price": "..."}

        # 다음 페이지 링크 follow
        next_page = response.css("a.next::attr(href)").get()
        if next_page:
            yield response.follow(next_page, callback=self.parse)
```

Spider 메서드: `on_start()`, `on_close()`, `on_error()`, `parse()` (추상)
SessionManager: 다중 세션 등록 (HTTP/브라우저/스텔스 동시 사용)
CrawlerEngine: anyio TaskGroup 기반 병렬 크롤링

## 주의사항
- ⚠️ 실제 크롤링 테스트 결과물은 제이회장님 확인 후에만 삭제
- 합법적 공개 데이터만 대상
- robots.txt 존중
- download_delay 설정으로 서버 부하 최소화

## 완료 기준
- insurance_spider.py + 테스트
- Checkpoint 저장/복원 확인
- 병렬 크롤링 동작 확인
- pyright 에러 0건
- 기존 테스트 회귀 없음

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