**task-1566.1 완료 보고** (dev2-team) **완료 보고서: 네이버 블로그 경쟁 분석 크롤링 셀렉터 수정** (5분 49초) **핵심 결과** CSS 셀렉터 의존 방식을 href 패턴(`blog.naver.com/{blogId}/{logNo}`) + 텍스트 유무 기반으로 전환하여 해결. 수정 후 homePosts 5건, blogPosts 5건 정상 반환 확인. DB 키 불일치도 함께 수정하여 히스토리 저장 정상 동작 확인. ## 수정 내역 ### 수정 파일 - `/home/jay/workspace/dashboard/server.py` ### 변경 1: `_extract_blog_urls_from_search()` (라인 313~350) - **변경 전**: CSS 셀렉터 4개 순차 매칭 (`a.title_link`, `div.title_area a` 등) - **변경 후**: `soup.find_all("a", href=True)` 전체 순회 → `blog.naver.com` href 패턴 필터 → `_parse_blog_url()`로 blogId/logNo 추출 → `url_key` 기반 중복 제거 → 제목 텍스트 5자 이상 필터 - **근거**: 네이버가 동적 해시 클래스명(`fender-ui_228e3bd1`, `T4d_tSMrB8qRjbb9_yER`)을 사용하여 CSS 셀렉터가 무효화됨. href 패턴 기반 방식은 클래스명 변경에 영향받지 않아 내구성 향상 ### 변경 2: DB 저장 키 수정 (라인 4377~4378) - **변경 전**: `result.get("homeResults", [])`, `result.get("blogResults", [])` - **변경 후**: `result.get("homePosts", [])`, `r **발견/해결 이슈 3건** 1. **CSS 셀렉터 전량 매칭 실패** — href 패턴 + 텍스트 기반 추출로 전환 2. **DB 저장 키 불일치로 빈 배열 저장** — `homeResults`→`homePosts`, `blogResults`→`blogPosts`로 수정 3. **`_parse_blog_url()`이 미래 URL 패턴 변경에 취약할 수 있음** — 미해결: 현재 2개 패턴(`/blogId/logNo`, `?blogId=&logNo=`)은 정상 동작. 추가 패턴 발생 시 별도 대응 필요. 범위 외 사유: 현재 정상 동작하며 예방적 수정은 불필요