FinanceDataReader를 활용한 자료 수집
한국 주식, 미국 주식, 지수, 환율, 원자재 등에 대한 데이타를 제공합니다.
실시간 데이타는 지원하지 않으며 공식 API가 아닌 웹스크래핑 기반으로 처리되기 때문에 웹페이지의 구조가 변경되면 작동이 안될 수도 있습니다. 따라서 이후에 다룰 수동 스크래핑도 별도로 익혀 두시는 것이 좋습니다.
공식사이트
설치방법
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')