주식·환율 데이터, 파이썬으로 자동 수집해서 엑셀로 저장하기

주식·환율 데이터, 파이썬으로 자동 수집해서 엑셀로 저장하기 (완성 코드 공개)

파이썬으로 주식과 환율 데이터를 자동으로 수집해 엑셀에 저장하는 모습


지정학적 리스크가 완화될 때마다 주식시장이 들썩이고 환율이 요동칩니다. 이런 날일수록 실시간으로 데이터를 확인하고 기록해두고 싶은데, 매번 포털 사이트를 열어 손으로 숫자를 옮겨 적는 것은 번거롭고 실수도 납니다.

파이썬을 한 번만 세팅해두면 원하는 종목의 주가와 환율 데이터를 자동으로 수집해 엑셀 파일에 날짜·시간과 함께 기록해 둘 수 있습니다. 매일 실행하면 자동으로 이력이 쌓여 나만의 데이터베이스가 됩니다.


1단계: 준비물 설치

파이썬이 설치되어 있어야 합니다. 없다면 python.org에서 최신 버전을 받아 설치하세요. 설치 시 반드시 "Add Python to PATH"에 체크해야 합니다.

금융 데이터 수집에 필요한 라이브러리를 설치합니다. 터미널(윈도우: CMD 또는 파워셸)을 열고 아래 명령어를 실행하세요:

pip install yfinance pandas openpyxl

yfinance는 야후 파이낸스에서 주식·환율 데이터를 무료로 가져오는 라이브러리입니다. 별도 API 키 신청이나 회원가입 없이 바로 사용할 수 있습니다. pandasopenpyxl은 수집한 데이터를 엑셀 파일로 저장하는 데 사용합니다.

💡 이 코드로 할 수 있는 것: 지정한 종목(삼성전자, 애플, 코스피 지수 등)과 환율(달러/원, 엔/원 등)의 현재가와 등락률을 자동으로 수집해 엑셀 파일에 날짜·시간과 함께 누적 저장합니다. 매일 실행하면 이력이 자동으로 쌓입니다.

2단계: 종목 코드 확인 방법

코드를 실행하기 전에 수집할 종목의 야후 파이낸스 티커(Ticker) 코드를 확인해야 합니다. 자주 쓰는 티커 코드는 아래와 같습니다.

주식 종목
  삼성전자        →  005930.KS
  SK하이닉스      →  000660.KS
  카카오          →  035720.KS
  애플            →  AAPL
  엔비디아        →  NVDA
  코스피 지수     →  ^KS11
  S&P 500 지수   →  ^GSPC
  나스닥 지수     →  ^IXIC

환율
  달러/원 (USD→KRW)  →  USDKRW=X
  엔/원   (JPY→KRW)  →  JPYKRW=X
  유로/원 (EUR→KRW)  →  EURKRW=X
  달러/엔 (USD→JPY)  →  USDJPY=X

이 목록에 없는 종목은 야후 파이낸스(finance.yahoo.com)에서 종목명을 검색하면 티커 코드를 확인할 수 있습니다.


3단계: 완성 코드

아래 코드를 그대로 복사해서 메모장에 붙여넣고, collect_finance.py로 저장하세요. 저장 시 파일 형식은 "모든 파일", 인코딩은 UTF-8로 설정합니다.

import yfinance as yf
import pandas as pd
from datetime import datetime
from pathlib import Path

# ① 설정: 수집할 종목과 환율 목록
TICKERS = {
    "삼성전자":    "005930.KS",
    "SK하이닉스":  "000660.KS",
    "코스피지수":  "^KS11",
    "S&P500":     "^GSPC",
    "달러/원":    "USDKRW=X",
    "엔/원":      "JPYKRW=X",
}

# ② 설정: 저장할 엑셀 파일 경로
OUTPUT_PATH = r"C:\Users\내이름\Desktop\금융데이터_이력.xlsx"   # ← 본인 경로로 수정

# ③ 데이터 수집
results = []
now = datetime.now().strftime("%Y-%m-%d %H:%M")

for name, ticker in TICKERS.items():
    try:
        data = yf.Ticker(ticker)
        info = data.fast_info

        current  = round(info.last_price, 2)
        prev     = round(info.previous_close, 2)
        change   = round(current - prev, 2)
        change_p = round((change / prev) * 100, 2) if prev else 0

        results.append({
            "수집일시":  now,
            "종목명":   name,
            "현재가":   current,
            "전일종가":  prev,
            "등락":     change,
            "등락률(%)": change_p,
        })
        print(f"  ✔ {name}: {current:,.2f}  ({'+' if change >= 0 else ''}{change_p}%)")

    except Exception as e:
        print(f"  ✘ {name} 수집 실패: {e}")

# ④ 엑셀에 누적 저장 (기존 데이터 유지하며 아래에 추가)
output = Path(OUTPUT_PATH)

if output.exists():
    existing = pd.read_excel(output, engine="openpyxl")
    combined = pd.concat([existing, pd.DataFrame(results)], ignore_index=True)
else:
    combined = pd.DataFrame(results)

combined.to_excel(output, index=False)
print(f"\n✅ 완료! 총 {len(combined)}행 누적 저장 → {OUTPUT_PATH}")

4단계: 실행 방법

  1. 코드 ① 설정의 TICKERS에 수집할 종목명과 티커 코드를 입력합니다. 종목을 추가하거나 삭제해도 됩니다.
  2. 코드 ② 설정의 OUTPUT_PATH에 저장할 엑셀 파일 경로를 입력합니다.
  3. 터미널에서 아래 명령어로 실행합니다:
python collect_finance.py

정상 실행 시 터미널에 이렇게 출력됩니다:

  ✔ 삼성전자: 83,200.00  (+2.34%)
  ✔ SK하이닉스: 241,500.00  (+1.87%)
  ✔ 코스피지수: 8,024.31  (+1.52%)
  ✔ S&P500: 5,892.10  (+0.98%)
  ✔ 달러/원: 1,342.50  (-0.31%)
  ✔ 엔/원: 8.92  (-0.15%)

✅ 완료! 총 6행 누적 저장 → C:\Users\내이름\Desktop\금융데이터_이력.xlsx

엑셀 파일을 열면 수집일시, 종목명, 현재가, 전일종가, 등락, 등락률이 열별로 정리됩니다. 스크립트를 실행할 때마다 기존 데이터 아래에 새 데이터가 추가되어 이력이 자동으로 누적됩니다.


5단계: 자주 발생하는 오류와 해결법

오류 1: ModuleNotFoundError: No module named 'yfinance'

설치가 제대로 되지 않은 경우입니다. 아래 명령어로 다시 시도하세요.

python -m pip install yfinance pandas openpyxl

오류 2: 현재가가 None 또는 0으로 출력됨

장 마감 이후 또는 주말·공휴일에는 실시간 데이터가 없어 직전 거래일의 종가가 반환됩니다. 이는 오류가 아니며 정상 동작입니다. 장 운영 시간(한국 오전 9시~오후 3시 30분, 미국 장은 한국 시각 기준 밤 10시 30분~새벽 5시)에 실행해야 실시간 데이터를 얻을 수 있습니다.

오류 3: 티커 코드를 찾을 수 없다는 오류

티커 코드가 잘못 입력된 경우입니다. 야후 파이낸스(finance.yahoo.com)에서 종목명을 직접 검색해 정확한 티커 코드를 확인하세요. 국내 주식의 경우 종목 코드 뒤에 반드시 .KS(코스피) 또는 .KQ(코스닥)를 붙여야 합니다.


응용: 매일 자동 실행해서 이력을 자동으로 쌓고 싶다면

윈도우 작업 스케줄러를 활용하면 매일 장 마감 직후 자동으로 실행해 데이터를 누적할 수 있습니다.

  1. 윈도우 검색창에 "작업 스케줄러"를 입력해 실행합니다.
  2. 오른쪽 패널에서 "기본 작업 만들기"를 클릭합니다.
  3. 트리거: "매일" 선택 → 실행 시간: 오후 3시 40분 (코스피 마감 후 10분)
  4. 동작: "프로그램 시작" → 프로그램란에 python, 인수란에 collect_finance.py의 전체 경로 입력
💡 이전 게시글과 결합하면: 누적된 엑셀 데이터를 차트 자동 저장 편의 코드와 연결하면, 매일 주가 추이 차트 이미지를 자동으로 생성하는 것도 가능합니다. 이메일 자동 발송 편과 결합하면 데이터와 차트를 매일 지정한 이메일로 자동 발송할 수도 있습니다.

핵심 요약

  • 준비물: Python + yfinance + pandas + openpyxl 설치 (pip install yfinance pandas openpyxl)
  • 설정: 수집할 종목 티커 코드와 저장 경로만 수정
  • 실행: 터미널에서 python collect_finance.py 입력
  • 결과: 현재가·등락률이 수집일시와 함께 엑셀에 누적 저장, 실행할 때마다 이력 자동 추가

이 코드를 응용하면 특정 종목이 일정 등락률을 넘을 때 알림 이메일을 자동 발송하는 것도 가능합니다.

이 블로그의 인기 게시물

카카오톡 용량 줄이기! 대화방 파일 삭제로 스마트폰 용량 확보법 (1분 해결)

느려진 구글 크롬 속도 2배 빨라지는 3가지 설정 방법 (2026년 최신 가이드)

업무 속도 3배 빨라지는 윈도우 기본 캡처 도구 단축키 및 200% 활용 꿀팁