"""[DEPRECATED] 네이버 finance 종목 뉴스 스크래핑. 본 모듈은 ai_news Phase 1 (2026-05-14) 에서 더 이상 파이프라인에서 사용되지 않음. 데이터 소스는 stock 의 articles 테이블 (ai_news/articles_source.py) 로 전환됨. 삭제 시점: Phase 2 (DART 도입) 결정 후. IC 검증 4주 누적 후 노드 활성화 여부에 따라 본 모듈을 (a) 완전 삭제 또는 (b) ensemble fallback 으로 재활용. """ from __future__ import annotations import logging from typing import Any, Dict, List from bs4 import BeautifulSoup log = logging.getLogger(__name__) NAVER_NEWS_URL = "https://finance.naver.com/item/news_news.naver" NAVER_HEADERS = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36", "Referer": "https://finance.naver.com/", } async def fetch_news(client, ticker: str, n: int = 5) -> List[Dict[str, Any]]: """Scrape top N news headlines for a ticker. Returns [] on any failure.""" try: r = await client.get(NAVER_NEWS_URL, params={"code": ticker, "page": 1}) except Exception as e: log.warning("ai_news scrape http error for %s: %s", ticker, e) return [] if r.status_code != 200: return [] soup = BeautifulSoup(r.text, "lxml") out: List[Dict[str, Any]] = [] for row in soup.select("table.type5 tbody tr")[:n]: title_el = row.select_one("td.title a") date_el = row.select_one("td.date") if not title_el or not date_el: continue out.append({ "title": title_el.get_text(strip=True), "date": date_el.get_text(strip=True), }) return out