방송사 저녁뉴스 기사 자동 수집기 구축기

목적과 배경

뉴스는 사회를 읽는 창입니다. 특히 저녁 시간대에 방송되는 주요 종합뉴스 프로그램은 각 방송사마다 다루는 이슈와 시각이 뚜렷하게 드러나는 대표적인 콘텐츠입니다.

목표: KBS, MBC, SBS, JTBC, TV조선, 채널A 6개 방송사의 저녁 메인뉴스 프로그램에서 다룬 뉴스 제목과 기사 링크를 자동으로 수집하고, 이를 PostgreSQL에 저장한 뒤 정치 이슈 및 주제별 편향성을 분석하는 시스템을 만드는 것입니다.

이 작업은 단순한 크롤링이 아닌, 프론트엔드의 다양한 렌더링 방식, 비동기 콘텐츠 로딩, 자바스크립트로 조작되는 UI 등을 고려해야 했던 도전적인 여정이었습니다.

🛠️ 수행한 작업 요약

  • Selenium + BeautifulSoup 기반 크롤러 구현
  • 6개 방송사별 HTML 구조 및 렌더링 방식 분석
  • 날짜별 기사 목록 수집
  • 중복 저장 방지 및 PostgreSQL 연동
  • WebDriverWait을 도입하여 불안정한 수집 이슈 개선

🖥️ 방송사별 파싱 로직 및 난이도

방송사주요 프로그램로딩 방식구현 난이도 요약난이도 (1~5)
MBC뉴스데스크.js 기반 정적 HTML.js 파일에서 날짜별 URL 추출 필요⭐⭐
KBS뉴스9JS 렌더링, 동적 anchor 생성WebDriverWait 필수⭐⭐⭐⭐
SBS8뉴스정적 HTML메타태그에서 정보 추출 필요⭐⭐
JTBC뉴스룸SPA 구조, 더보기 버튼 반복동적 로딩 반복 처리⭐⭐⭐⭐
TV조선뉴스9/뉴스7공식 API 제공catid (평일/주말) 주의
채널A뉴스AJS 달력 조작 기반달력 JS 객체 수동 조작 필요⭐⭐⭐⭐

⚠️ 구현 시 주의사항 요약

  • 페이지 로딩 대기: time.sleep() 대신 WebDriverWait 사용 권장
  • 중복 기사 저장 방지: URL 기준 ON CONFLICT DO NOTHING 처리
  • 달력 JS 제어: 채널A의 경우 내부 JS 객체(now) 수정 및 JS 함수 호출 필요
  • 공식 API 활용: TV조선처럼 API가 제공되면 최우선 활용

🔄 현재 시스템 구조 요약

  • 방송사별로 기사 목록을 가져오는 get_articles(broadcaster, date) 통합 함수 구현
  • 기사 제목, URL, 날짜, 순서, 방송사 정보를 포함한 DataFrame 생성
  • PostgreSQL 테이블 articles에 중복 없이 삽입
  • .env 파일로 DB 접속정보 보호
  • tqdm을 통한 수집 진행 상태 시각화

📅 앞으로의 마일스톤

  1. [✔ 완료] 방송사별 기사 제목/링크 수집
  2. [🛠 진행 중] 기사 본문, 기자 이름 수집 기능 추가
  3. [🔁 예정] Ollama 기반 기사 요약/키워드 자동 추출
  4. [📊 예정] 방송사별 키워드 통계 분석 및 시각화
  5. [📆 장기 목표] 뉴스 편향성 분석 및 월별 리포트 자동화

💬 마무리하며

이번 프로젝트는 단순한 웹 크롤링을 넘어, 방송사마다 상이한 웹페이지 구조자바스크립트 기반 렌더링, 동적 콘텐츠 제어를 직접 제어하면서 수집 시스템을 구축해본 의미 있는 경험이었습니다.

다음 단계에서는 이 데이터를 기반으로 한 LLM 요약, 키워드 추출, 그리고 정치적 프레이밍 분석까지 도전할 예정입니다. 앞으로도 기술적 여정과 그 결과들을 공유드릴게요.

Comments

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다