파이썬과 ChatGPT를 활용한 ‘나만의 주식 뉴스 요약 봇’ 만들기: 데이터 수집부터 요약까지 완벽 가이드

파이썬과 ChatGPT를 활용한 ‘나만의 주식 뉴스 요약 봇’ 만들기: 데이터 수집부터 요약까지 완벽 가이드

안녕하세요. IT 기술의 발전이 우리의 일상을 어떻게 혁신하는지 탐구하고 공유하는 IT 전문 블로거입니다.
현대 사회에서 정보는 곧 돈입니다. 특히 변동성이 큰 주식 시장에서 정보의 가치는 절대적입니다. 하지만 매일 쏟아지는 수천 건의 경제 기사와 기업 공시를 개인이 일일이 읽고 분석하기란 불가능에 가깝습니다. “중요한 뉴스를 놓치면 어떡하지?”라는 불안감(FOMO)은 투자자들을 항상 괴롭히곤 하죠.
이러한 문제를 해결하기 위해 오늘은 파이썬(Python)ChatGPT(OpenAI API)를 결합하여, 내가 관심 있는 종목의 뉴스만 콕 집어 요약해 주는 ‘나만의 주식 뉴스 요약 봇’ 제작 과정을 상세히 소개해 드리겠습니다. 코딩 초보자도 차근차근 따라올 수 있도록 설계했으니 끝까지 함께해 주세요!


1. 왜 파이썬과 ChatGPT인가?

1.1 데이터 수집의 최강자, 파이썬

파이썬은 데이터 크롤링과 자동화 분야에서 독보적인 라이브러리 생태계를 보유하고 있습니다. BeautifulSoup, Selenium, requests와 같은 강력한 도구들을 사용하면 복잡한 웹사이트에서도 원하는 정보를 손쉽게 추출할 수 있습니다.

1.2 자연어 처리의 혁명, ChatGPT

과거의 요약 알고리즘은 단순히 문장에서 핵심 키워드가 많이 포함된 구절을 추출하는 방식이었습니다. 하지만 ChatGPT(LLM)는 문맥을 이해합니다. 수많은 뉴스 속에서 실제 주가에 영향을 미칠만한 ‘노이즈’와 ‘시그널’을 구분하고, 이를 투자자가 이해하기 쉬운 문체로 정리해 주는 비서 역할을 수행합니다.

1.3 시간 효율성의 극대화

이 봇을 구축하면 매일 아침 출근길이나 장 시작 전, 10분이 걸리던 뉴스 서핑 시간을 단 30초의 요약 메시지 확인으로 단축할 수 있습니다.

2. 뉴스 요약 봇의 작동 원리

우리가 만들 시스템은 크게 4단계로 구성됩니다.
1. 데이터 수집 (Crawling): 네이버 금융이나 다음 금융 등 뉴스 포털에서 특정 키워드(종목명)를 검색하여 최신 기사 리스트를 가져옵니다.
2. 본문 추출 (Parsing): 검색된 결과 페이지에서 기사의 링크를 타고 들어가 실제 텍스트 내용을 긁어옵니다.
3. 내용 요약 (Summarizing): 수집된 본문을 OpenAI의 GPT 모델에 전달하여 핵심 내용을 3줄 요약하고 투자 인사이트를 도출합니다.
4. 알림 발송 (Notification): 요약된 내용을 텔레그램(Telegram)이나 슬랙(Slack) 메시지로 전송합니다.


3. 환경 구축 및 라이브러리 설치

가장 먼저 파이썬이 설치되어 있어야 하며, 필요한 라이브러리를 설치해야 합니다. 터미널(또는 CMD)에서 아래 명령어를 입력하세요.

pip install requests beautifulsoup4 openai python-dotenv
  • requests: 웹 페이지의 HTML 소스를 가져올 때 사용합니다.
  • beautifulsoup4: HTML 소스에서 원하는 데이터만 파싱할 때 사용합니다.
  • openai: ChatGPT API를 사용하기 위한 공식 라이브러리입니다.
  • python-dotenv: API 키와 같은 민감 정보를 안전하게 관리하기 위해 사용합니다.

4. 실전! 코드 구현하기

4.1 단계: 뉴스 데이터 수집 함수 만들기

첫 번째 코드는 네이버 뉴스 검색 결과에서 기사 제목과 본문 링크를 가져오는 기능입니다.

import requests
from bs4 import BeautifulSoup
def get_stock_news(stock_name):
# 네이버 뉴스 검색 URL (종목명으로 검색)
url = f"https://search.naver.com/search.naver?where=news&query={stock_name}&sort=1"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
}
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
news_items = soup.select('.news_tit')
news_list = []
for item in news_items[:5]:  # 최신 뉴스 5개만 추출
title = item.get_text()
link = item['href']
news_list.append({"title": title, "link": link})
return news_list
# 테스트 실행
# print(get_stock_news("삼성전자"))

4.2 단계: ChatGPT API를 이용한 요약 로직

수집된 뉴스 제목과 본문을 바탕으로 요약을 요청하는 코드입니다. OpenAI API 키가 필요합니다.

import openai
import os
from dotenv import load_dotenv
load_dotenv()
openai.api_key = os.getenv("OPENAI_API_KEY")
def summarize_news(news_list):
combined_titles = "\n".join([f"- {n['title']}" for n in news_list])
prompt = f"""
당신은 전문 주식 분석가입니다. 아래 제공된 최신 뉴스 제목들을 바탕으로 현재 이 종목의 주요 이슈를 분석해주세요.
[뉴스 목록]
{combined_titles}
[요청 사항]
1. 가장 중요한 핵심 이슈 3가지를 '상승 요인' 또는 '하락 요인'으로 구분하여 요약하세요.
2. 현재 투자자들이 주의 깊게 봐야 할 지표나 이벤트가 무엇인지 한 문장으로 조언하세요.
3. 어조는 전문적이면서도 명확해야 합니다.
"""
try:
response = openai.ChatCompletion.create(
model="gpt-4o-mini",  # 가성비 좋은 모델 선택
messages=[
{"role": "system", "content": "도움이 되는 주식 분석 전문가입니다."},
{"role": "user", "content": prompt}
],
temperature=0.5
)
return response.choices[0].message['content']
except Exception as e:
return f"요약 중 오류 발생: {e}"
# 실행 예시
# news_data = get_stock_news("삼성전자")
# summary = summarize_news(news_data)
# print(summary)

5. 성능을 높이는 꿀팁: 프롬프트 엔지니어링

위의 코드에서 가장 중요한 부분은 prompt 변수입니다. ChatGPT가 단순히 텍스트를 줄이는 것을 넘어, 투자 관점에서의 요약을 하도록 유도해야 합니다.
페르소나 부여: “당신은 월스트리트 출신의 20년 차 퀀트 분석가입니다”와 같은 문구를 추가하면 결과물의 질이 달라집니다.
제약 조건 설정: “불필요한 미사여구는 제외하고 수치 데이터 위주로 정리해 줘”라고 명시하면 훨씬 깔끔한 리포트를 얻을 수 있습니다.
출력 형식 지정: JSON 형식으로 출력을 요구하면 나중에 데이터베이스에 저장하거나 웹 대시보드에 뿌려주기 매우 용이합니다.


6. 주의사항 및 윤리적 고려사항

자동화 봇을 운영할 때 반드시 지켜야 할 몇 가지 주의사항이 있습니다.
1. 크롤링 정책 준수: 웹사이트의 robots.txt를 확인해야 합니다. 너무 잦은 요청은 서버에 부하를 주어 IP 차단을 당할 수 있으므로 time.sleep() 함수를 사용해 간격을 두는 것이 좋습니다.
2. API 비용 관리: OpenAI API는 사용량에 따라 과금됩니다. 무분별한 호출을 방지하기 위해 스케줄러(예: GitHub Actions, AWS Lambda)를 사용하여 특정 시간에만 실행되도록 설정하세요.
3. 정보의 한계 인정: ChatGPT의 요약은 참고 자료일 뿐입니다. 인공지능이 환각 현상(Hallucination)으로 잘못된 수치를 제공할 수 있으므로 최종 투자 결정은 본인의 판단하에 실제 원문 기사를 대조해 보는 과정이 필요합니다.


7. 한 단계 더 나아가기: 감성 분석(Sentiment Analysis)

단순 요약을 넘어, 뉴스의 어조가 긍정(Bullish)인지 부정(Bearish)인지 수치화할 수도 있습니다. ChatGPT에게 “이 기사 리스트의 전체적인 투자 심리 점수를 -10(매우 부정)에서 +10(매우 긍정) 사이로 매겨줘”라고 요청해 보세요. 이를 시계열 데이터로 쌓으면 나만의 ‘공포-탐욕 지수’를 만들 수도 있습니다.

파이썬과 ChatGPT를 활용한 ‘나만의 주식 뉴스 요약 봇’ 만들기: 데이터 수집부터 요약까지 완벽 가이드

8. 결론

지금까지 파이썬과 ChatGPT를 활용하여 주식 뉴스 요약 봇을 만드는 과정을 살펴보았습니다. 기술은 어렵고 복잡한 것이 아니라, 우리의 불편함을 해결해 줄 때 가장 빛이 납니다. 매일 반복되는 정보 수집 업무를 자동화함으로써 여러분은 더 본질적인 분석과 전략 수립에 집중할 수 있게 될 것입니다.
오늘 소개해 드린 코드를 바탕으로 여러분만의 맞춤형 투자 비서를 만들어 보세요. 작은 자동화 하나가 여러분의 투자 수익률에 큰 변화를 가져올지도 모릅니다. 궁금한 점이나 구현 중 막히는 부분은 댓글로 남겨주시면 정성껏 답변해 드리겠습니다.


[Infographic Image Prompts]

**

관련 글 보기