파이썬 뉴스 크롤링과 LLM 요약 자동화 파이프라인: 아침 7시 텔레그램 뉴스 브리핑 구축 가이드

오늘은 파이썬 뉴스 크롤링과 LLM 요약 자동화 파이프라인에 대해서 알아보겠습니다.
바쁜 아침 출근길이나 업무 시작 전 수십 개의 뉴스 사이트를 일일이 접속해 헤드라인을 훑는 일은 상당한 집중력과 시간을 소모합니다. 원하는 분야의 주요 언론사 기사 원문을 자동으로 수집하고, 대규모 언어 모델(LLM)을 통해 핵심만 3줄로 요약한 뒤, 매일 아침 정해진 시간에 개인 메신저로 받아보는 자동화 파이프라인은 정보 과부하를 해결하는 가장 실용적인 해결책입니다. 본 글에서는 RSS 피드 기반의 정적 크롤링부터 LLM API 요약 연동, 텔레그램 봇 발송, 그리고 클라우드 무료 스케줄러(GitHub Actions)를 결합한 무중단 아침 뉴스 브리핑 시스템 구축 전 과정을 상세히 다룹니다.


1. 아침 뉴스 요약 시스템 아키텍처 및 핵심 라이브러리

단순 웹 스크래핑은 대상 웹사이트의 HTML DOM 구조가 조금만 바뀌어도 파서가 망가지는 취약점이 있습니다. 따라서 표준 규격인 RSS(Rich Site Summary) 피드를 1차 수집 경로로 채택하고, 상세 본문 파싱이 필요할 때만 선별적으로 HTML 추출 라이브러리를 병행하는 구조가 유지보수에 훨씬 유리합니다.

파이썬 뉴스 크롤링
모듈 계층핵심 라이브러리/도구수행 작업 및 최적화 포인트
수집 (Ingestion)feedparser, trafilatura표준 RSS 피드 파싱 및 기사 본문 텍스트 자동 정제
요약 (Inference)openai 또는 ollamaGPT-4o-mini / 오픈소스 LLM을 활용한 불릿 포인트 3줄 요약
전송 (Delivery)python-telegram-bot텔레그램 채널/개인 챗방으로 마크다운 포맷 메시지 푸시
실행 (Orchestration)GitHub Actions / crontab매일 오전 7시 무중단 자동 실행 및 실패 시 재시도

관련 오픈소스 라이브러리의 최신 공식 가이드 및 릴리스 정보는 파이썬 공식 한국어 문서 포털에서 세부 표준 모듈 규격을 검토할 수 있습니다.


2. 뉴스 수집부터 텔레그램 발송까지 완성형 파이썬 스크립트

아래 코드는 주요 언론사의 IT/경제 분야 RSS 피드에서 최신 기사 3건을 수집하고, OpenAI API를 통해 핵심 요약을 도출한 후 텔레그램으로 전송하는 단일 실행 스크립트입니다.

image
import os
import feedparser
import trafilatura
from openai import OpenAI
import asyncio
from telegram import Bot

# 환경 변수 설정
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
TELEGRAM_BOT_TOKEN = os.getenv("TELEGRAM_BOT_TOKEN")
TELEGRAM_CHAT_ID = os.getenv("TELEGRAM_CHAT_ID")

# 주요 언론사 RSS 피드 목록 (예: 연합뉴스 경제/IT)
RSS_FEEDS = [
    "[https://www.yna.co.kr/rss/economy.xml](https://www.yna.co.kr/rss/economy.xml)",
    "[https://www.yna.co.kr/rss/it.xml](https://www.yna.co.kr/rss/it.xml)"
]

def get_latest_news_articles(feed_url, max_items=3):
    """RSS 피드에서 최신 기사 링크 및 메타데이터 추출"""
    feed = feedparser.parse(feed_url)
    articles = []
    
    for entry in feed.entries[:max_items]:
        title = entry.title
        link = entry.link
        
        # trafilatura를 사용하여 본문 텍스트만 추출 (광고 및 불필요한 UI 제거)
        downloaded = trafilatura.fetch_url(link)
        if downloaded:
            main_text = trafilatura.extract(downloaded)
            if main_text:
                articles.append({
                    "title": title,
                    "link": link,
                    "content": main_text[:2000] # 토큰 절약을 위한 2,000자 제한
                })
    return articles

def summarize_news(client, title, content):
    """LLM을 활용한 기사 본문 3줄 불릿 요약"""
    prompt = f"""
    당신은 전문 뉴스 에디터입니다. 다음 기사의 핵심 내용을 명확하고 간결하게 불릿 포인트 3문장으로 요약하세요.
    상투적인 표현(~알아보겠습니다, 요약하자면 등)은 배제하고 사실 위주로 작성하세요.

    제목: {title}
    본문: {content}
    """
    
    response = client.chat.completions.create(
        model="gpt-4o-mini",
        messages=[
            {"role": "system", "content": "한국어로 간결하고 전문적인 뉴스 브리핑을 작성합니다."},
            {"role": "user", "content": prompt}
        ],
        temperature=0.3,
        max_tokens=300
    )
    return response.choices[0].message.content.strip()

async def send_telegram_briefing(message):
    """텔레그램 봇을 통한 마크다운 메시지 발송"""
    bot = Bot(token=TELEGRAM_BOT_TOKEN)
    await bot.send_message(
        chat_id=TELEGRAM_CHAT_ID,
        text=message,
        parse_mode="Markdown",
        disable_web_page_preview=True
    )

async def main():
    ai_client = OpenAI(api_key=OPENAI_API_KEY)
    final_report = ["*📢 오늘의 모닝 뉴스 핵심 브리핑*\n"]
    
    for url in RSS_FEEDS:
        articles = get_latest_news_articles(url, max_items=2)
        for art in articles:
            summary = summarize_news(ai_client, art["title"], art["content"])
            brief = f"🔹 *[{art['title']}]({art['link']})*\n{summary}\n"
            final_report.append(brief)
            
    full_message = "\n".join(final_report)
    await send_telegram_briefing(full_message)
    print("뉴스 브리핑 발송이 완료되었습니다.")

if __name__ == "__main__":
    asyncio.run(main())

3. 핵심 기술 분석 및 파이프라인 고도화 기법

트래필라투라(Trafilatura)를 통한 웹 노이즈 제거

일반적인 BeautifulSoup 스크래핑은 네비게이션 바, 사이드바 배너, 저작권 문구, 독자 댓글 등 기사 본문과 무관한 HTML 태그를 대거 포함합니다. trafilatura는 머신러닝 기반 휴리스틱 알고리즘을 활용해 순수 기사 본문 텍스트만을 정확하게 발라내어 LLM API로 전송되는 토큰 비용을 최소 40% 이상 절감합니다.

토큰 소모량과 응답 속도 최적화

모든 기사를 전체 전송할 경우 프롬프트 토큰이 기하급수적으로 늘어납니다. 본문 텍스트를 슬라이싱([:2000])하여 핵심 리드문 위주로 전달하고, 가성비가 높은 소형 모델(gpt-4o-mini)이나 로컬 환경의 Ollama(Llama-3-Korean)를 사용하면 월 1달러 미만의 비용으로 상시 운용할 수 있습니다.


4. 매일 아침 7시 자동 실행: GitHub Actions 클라우드 스케줄링

내 PC를 24시간 켜둘 필요 없이, 깃허브의 무료 CI/CD 파이프라인인 GitHub Actions를 활용하여 매일 아침 정해진 시간에 스크립트가 실행되도록 설정합니다.

프로젝트 레포지토리 내 .github/workflows/morning_news.yml 파일을 생성하고 아래 워크플로우를 정의합니다.

댓글 남기기

광고 차단 알림

광고 클릭 제한을 초과하여 광고가 차단되었습니다.

단시간에 반복적인 광고 클릭은 시스템에 의해 감지되며, IP가 수집되어 사이트 관리자가 확인 가능합니다.