python으로 대한민국 주식데이터 받기
1995년 5월 2일부터 2023년 5월 11일 까지 주식데이터 받는 코드는 다음과 같다
대한민국 법정 공휴일과 대한민국 마지막 일은 제외해야하는 코드는 추가적으로 작성해야한다.
공휴일이 년도 마다 다를 가능성이 있어 다운로드받은 데이터에 주가 값이 없으면 그 파일은 제거하는 코드를 추가 해는 식으로 작성 할 수있다.
import datetime
import requests
import re
import urllib.parse
import os
START_DATE = datetime.date(1995, 5, 2)
END_DATE = datetime.date(2023, 5, 11)
MATA_DATA_URL = "http://data.krx.co.kr/comm/fileDn/GenerateOTP/generate.cmd"
DOWNLOAD_URL = "http://data.krx.co.kr/comm/fileDn/download_excel/download.cmd"
def create_folder(folder_path):
if not os.path.exists(folder_path):
os.makedirs(folder_path)
def download_file(url, payload, save_path):
response = requests.post(url, data=payload)
if response.status_code == 200:
download_response = requests.post(DOWNLOAD_URL, data={
"code": response.content.decode('utf-8')
})
if download_response.status_code == 200:
content_disposition = download_response.headers.get('Content-Disposition')
file_name = payload["trdDd"] +".xlsx"
with open(os.path.join(save_path, file_name), "wb") as file:
file.write(download_response.content)
return file_name
else:
return None
current_date = START_DATE
while current_date <= END_DATE:
if current_date.weekday() < 5: # 월요일(0)부터 금요일(4)까지만 작동
year_folder = str(current_date.year)
create_folder(year_folder)
current_format = current_date.strftime("%Y%m%d")
payload = {
"locale": "ko_KR",
"mktId": "ALL",
"trdDd": current_format,
"share": "1",
"money": "1",
"csvxls_isNo": "false",
"name": "fileDown",
"url": "dbms/MDC/STAT/standard/MDCSTAT01501"
}
file_name = download_file(MATA_DATA_URL, payload, year_folder)
if file_name:
print(f"다운로드 완료 - {file_name}")
else:
print(f"다운로드 실패 - {current_format}")
current_date += datetime.timedelta(days=1)