updated_at: 2025-07-27 22:40

FinanceDataReader를 활용한 자료 수집

한국 주식, 미국 주식, 지수, 환율, 원자재 등에 대한 데이타를 제공합니다.
실시간 데이타는 지원하지 않으며 공식 API가 아닌 웹스크래핑 기반으로 처리되기 때문에 웹페이지의 구조가 변경되면 작동이 안될 수도 있습니다. 따라서 이후에 다룰 수동 스크래핑도 별도로 익혀 두시는 것이 좋습니다.

공식사이트

FinanceDataReader 공식 사이트

설치방법

pip install finance-datareader

간단예제

1. 삼성전자(005930) 주가 데이터

import FinanceDataReader as fdr

df = fdr.DataReader('005930', start='2024-01-01', end='2024-07-15')
print(df.head())

2. KRX 전체 상장 종목 목록

df_krx = fdr.StockListing('KRX')
print(df_krx[['Code', 'Name', 'Market']])

3. 미국 애플(AAPL) 주가 조회

df = fdr.DataReader('AAPL', start='2023-01-01')
print(df.tail())

실전 예제

예제 1

특정일(10일) 동안의 데이타 불러오기

from datetime import date, datetime, timedelta
import FinanceDataReader as fdr

class FdrWrapper:
    def __init__(self, parent=None):
        super().__init__()

    def get_market_price_by_date(self, code, from_dt=None, to_dt=None):

        # 오늘 날짜
        to_dt = datetime.today()
        # 최근 N일 (예: 최근 10일)
        N = 10
        from_dt = to_dt - timedelta(days=N * 2)  # 휴일 포함 넉넉하게

        # 날짜 문자열로 변환
        start = from_dt.strftime("%Y%m%d")
        end = to_dt.strftime("%Y%m%d")

        df = fdr.DataReader(code, start, end) # 이것은 수정 주가 반영된 결과
        self.update_market_price_by_date(df, code, N)

    def update_market_price_by_date(self, df, code, n=10):
        df = df.tail(n)

        for date, row in df.iterrows():
            print(f"{date}: 시가={row['Open']:,}, 고가={row['High']:,}, 저가={row['Low']:,}, 종가={row['Close']:,}, 거래량={row['Volume']:,}")
        pass

if __name__ == '__main__':
    fw = FdrWrapper()
    fw.get_market_price_by_date('005930')
평점을 남겨주세요
평점 : 2.5
총 투표수 : 1

질문 및 답글