# Task: 인포키워드 Step 5 광고 감지 오탐 수정

## 프로젝트 경로
`/home/jay/projects/InfoKeyword`

## 문제
"전립선 비대증" 키워드 분석 시 네이버 블로그탭 TOP 10 결과가 **전부 광고로 오탐**됨.
→ 정보성 0개, 홍보성 0개로 분석 불가.

## 원인 (아누 분석)

### 원인 1: `_is_ad()` 과잉 감지
- 파일: `worker/crawler/blog_search.py:63-66`
- "광고" 텍스트를 검색결과 아이템 내 **모든 span/div/em**에서 찾음
- 실제 광고 표시는 네이버 블로그탭 검색결과 각 항목의 **우측 상단 특정 라벨 요소**에만 존재
- 네이버 HTML 구조 변경으로 일반 결과에도 매칭되는 셀렉터 존재 가능

### 원인 2: 광고 결과를 TOP 10에 포함
- 파일: `worker/crawler/blog_search.py:157-165`
- 현재: 광고를 `is_ad=True`로 태깅만 하고 TOP 10에 포함
- 올바른 동작: 광고를 **건너뛰고** 일반 결과만으로 TOP 10 채우기

## 수정 범위

### 1. `worker/crawler/blog_search.py`

**`_is_ad()` 정밀화:**
- 현재 네이버 블로그탭 HTML을 실제로 크롤링하여 광고 라벨의 정확한 구조 확인
- 네이버 블로그탭에서 광고 결과는 우측 상단에 "광고"라는 텍스트 표기가 있음
- 그 **특정 라벨 요소만** 감지하도록 셀렉터 업데이트
- 참고: Step 7 대표카페 뱃지 체크와 동일한 패턴 (특정 라벨 요소를 정확히 타겟팅)

**`search_blogs()` 로직 수정:**
- 광고 결과(`is_ad=True`) → 건너뛰기 (TOP 10 카운트에서 제외)
- 일반 결과만으로 TOP 10 채우기
- 10개 미달 시 추가 수집 방안 검토 (로그 경고)

### 2. `worker/pipeline/analyzer.py` (Step 5)
- 광고가 이미 제외된 상태로 들어오므로, Step 5에서 `is_ad` 처리 로직이 남아있다면 정리
- "광고 항목으로 분석 제외" 로직이 불필요해질 수 있음 → 방어 코드로 유지는 OK

## 작업 절차

1. **리서치**: 네이버 블로그탭에서 "전립선 비대증" 검색 → HTML 크롤링 → 실제 광고/비광고 결과의 HTML 구조 차이 확인
2. **`_is_ad()` 셀렉터 업데이트**: 실제 광고 라벨 구조에 맞게 수정
3. **`search_blogs()` 수정**: 광고 건너뛰기 로직 적용
4. **Step 5 정리**: 불필요한 is_ad 방어코드 정리 (필요시)
5. **테스트**: "전립선 비대증" 키워드로 실제 분석 실행 → 광고 제외 후 TOP 10 정상 수집 확인

## 검증 기준
- [ ] "전립선 비대증" 키워드 분석 시 TOP 10이 정상 수집됨 (10개 비광고 결과)
- [ ] 실제 광고 결과는 정확히 건너뛰어짐
- [ ] 비광고 결과가 광고로 오탐되지 않음
- [ ] Step 5 홍보성 분석이 정상 수행됨 (정보성/홍보성 분류)
- [ ] 다른 키워드("강아지 사료", "아이폰 케이스" 등)로도 정상 동작 확인
- [ ] pyright 에러 0건
- [ ] 기존 테스트 통과

## 참고
- Step 7 대표카페 뱃지 감지 로직 참고: `worker/crawler/` 또는 `worker/pipeline/` 내 카페 관련 코드
- 워커 실행: `cd /home/jay/projects/InfoKeyword && unset CLAUDECODE && python3 -m uvicorn worker.main:app --host 0.0.0.0 --port 8100`
- 프론트 실행: `cd /home/jay/projects/InfoKeyword && npx next dev -p 3001 -H 0.0.0.0`
