파이썬으로 한국 주식 데이터 받기 2026.09.18
한국주식데이터는 KOSPI·KOSDAQ·KONEX 전 종목의 확정 종가·재무·공시를 API 키도 회원가입도 승인 신청도 없이, 주소를 그대로 읽는 것만으로 쓸 수 있게 CSV·JSON 으로 공개합니다(2026.09.18 기준 2,787종목).
전 종목 한 번에 — 세 줄
import pandas as pd
df = pd.read_csv("https://aikstockdata.com/data/public/quotes.csv", dtype={"종목코드": str})
print(len(df)) # 2,787어떤 이름표(User-Agent)로 불러도 200 입니다(2026-09-16 확인). 예전에는 파이썬 기본 이름표(Python-urllib/*)를 앞단 봇 필터가 막았는데 그 설정을 껐습니다. 혹시 403 이 나면 기본값을 그대로 두지 말고 아무 이름이나 넣어 보세요: urllib.request.Request(url, headers={"User-Agent": "my-app"}).
판다스 없이 requests 로 받으셔도 같습니다.
import requests, pandas as pd, io
csv = requests.get("https://aikstockdata.com/data/public/quotes.csv").text
df = pd.read_csv(io.StringIO(csv), dtype={"종목코드": str})열 14개의 뜻은 종목코드·종가 CSV 장에 표로 있습니다.
같은 내용의 quotes.json 도 있습니다.
판다스 없이, 표준 라이브러리만
import json, urllib.request
u = "https://aikstockdata.com/data/public/s/005930.json"
req = urllib.request.Request(u, headers={"User-Agent": "my-script/1.0"})
d = json.load(urllib.request.urlopen(req))
print(d["name_ko"], d["quote"]["close"], d["as_of"])
# 삼성전자 252500 20260917종목별 주소는 /data/public/s/{종목코드}.json 입니다. 한 파일 안에
시세·재무·최근 공시·밸류에이션이 함께 들어 있어, 종목 하나를 보려고 여러 번 부를 일이 없습니다.
필드 뜻을 파일이 스스로 말합니다
종목 JSON 에는 field_definitions 가 들어 있습니다. 어느 열이 무슨 뜻인지
문서를 찾아다니지 않아도 됩니다 — 파일 안에 적혀 있습니다.
for k, v in d["field_definitions"]["quote"].items():
print(k, "=", v)같은 자리에 license 와 citation 도 들어 있습니다.
인용 문구를 따로 만들 필요 없이 그대로 쓰시면 됩니다.
주식 시계열 데이터 — 종목마다 한 파일
종목별 일별 종가와 거래량을 한 파일로 드립니다(종목마다 최대 321거래일).
주소는 종목 JSON 바로 옆입니다 — /data/public/s/{종목코드}_history.json.
빈 날짜·없는 것(수정주가·분봉)까지 정리한 설명은 과거 주식 데이터 다운로드에 있습니다.
import requests, pandas as pd
u = "https://aikstockdata.com/data/public/s/005930_history.json"
h = requests.get(u).json()
df = pd.DataFrame(h["rows"], columns=h["columns"])
# date, close, volume기간은 파일 안 period 에, 행 수는 count 에 적혀 있습니다.
시계열을 다루실 때 걸리기 쉬운 것 셋을 미리 적어 둡니다 — 파일 안
notes 에도 같은 내용이 있습니다.
- 휴장일과 무거래일은 행이 아예 없습니다. 날짜가 연속이라고 가정하고 인덱싱하면 어긋납니다. 날짜로 조인하시거나 영업일 달력을 따로 쓰십시오.
- 수정주가가 아닙니다. 액면분할·권리락이 있던 종목은 그 날에서 값이 끊깁니다. 가공하지 않고 그대로 드리니, 쓰시기 전에 그 날짜를 확인해 주십시오.
- 신규 상장 종목은 행이 적습니다. 이력이 그만큼 없는 것이지 빠뜨린 것이
아닙니다.
count로 확인하실 수 있습니다.
시가총액은 이 파일에 없습니다 — 같은 종목의
상세 JSON 에 있는
quote.shares_outstanding(상장주식수)에 종가를 곱하시면 됩니다.
전 종목 한 줄짜리가 필요하시면 quotes.csv 의
lstgStCnt(상장주식수) 열을 쓰십시오.
시장과 견주려면 — 지수도 같은 모양입니다
market_index_history.json
에 코스피·코스닥 지수의 일별 종가가 들어 있고, 같은 date 로 그대로 조인됩니다.
시장 대비 초과수익률을 직접 계산하실 수 있습니다.
i = requests.get(
"https://aikstockdata.com/data/public/market_index_history.json").json()
ks = pd.DataFrame(i["series"]["코스피"]["rows"], columns=["date", "close"])
m = df.merge(ks, on="date", suffixes=("", "_kospi"))이 지수 계열이 공시 뒤 주가 경로의 시장조정 기준선과 같은 값입니다 — 저희 집계를 그대로 재현해 보실 수 있습니다.
공시만 따로
u = "https://aikstockdata.com/data/public/disclosures.json"
req = urllib.request.Request(u, headers={"User-Agent": "my-script/1.0"})
d = json.load(urllib.request.urlopen(req))종목 JSON 안의 recent_disclosures 로도 종목별 최근 공시를 볼 수 있고,
공시가 몇 시에 접수되는지는 공시 시계에 있습니다.
자주 걸리는 것 셋
| 증상 | 왜 그런가 | 어떻게 하나 |
|---|---|---|
| 종목코드 005930 이 5930 이 된다 | 판다스가 숫자로 읽어 앞자리 0 을 지웁니다. | read_csv 에 dtype={"종목코드": str} 를 주십시오. |
| 값이 None 이거나 — 로 나온다 | 0 이 아니라 '제공되지 않았다'는 뜻입니다. 원천에 없는 항목입니다. | 0 으로 채우지 마시고 결측으로 두십시오. 평균을 내면 숫자가 틀어집니다. |
| 어제 숫자와 다르다 | 이 파일은 전 영업일 확정 종가입니다. 장중 시세가 아닙니다. | 기준일은 basDt 열과 as_of 에 있습니다. 함께 기록하십시오. |
403 이 나면 — 이름표를 하나 붙이십시오
2026-08-11 부터 2026-09-16 까지는 아래 두 줄이 403 이었습니다. 저희 서버 앞단의
보안 설정이 Python-urllib 라는 기본 이름표를 자동 도구로 보고 막았습니다
(error code: 1010). 데이터를 아낀 것이 아니라 저희가 못 푼 설정이었고,
2026-09-16 에 껐습니다 — 지금은 아래 두 줄도 그대로 됩니다.
# 2026-08-11~09-16 에는 이것이 403 이었다
pd.read_csv("https://aikstockdata.com/data/public/quotes.csv")
urllib.request.urlopen("https://aikstockdata.com/data/public/quotes.csv")혹시 다시 403 을 받으시면 이름표를 아무거나 하나 주시면 됩니다. 값은 무엇이든 됩니다 —
my-script/1.0 이든 스크립트 이름이든 상관없습니다.
requests 를 쓰시면 라이브러리가 알아서 자기 이름표를 붙이므로
아무것도 안 하셔도 됩니다. 그리고 그런 일이 생기면 알려 주십시오 —
저희 쪽 설정이지 이용자 잘못이 아닙니다.
얼마나 자주 불러도 되나
파일은 매 거래일 저녁 6시 30분 전후(KST)에 한 번 갱신됩니다. 그러니 하루 한 번이면 충분합니다 — 1분마다 부르셔도 같은 파일입니다. 받아서 로컬에 두고 쓰시는 편이 빠르고, 저희 쪽에도 부담이 없습니다. 요청 수 제한도, 키 발급도 없습니다. 쓰신 뒤에 출처만 적어 주시면 그것으로 충분합니다.
pykrx 와 함께 쓰기 — 무엇이 다른가
pykrx 는 한국거래소(KRX) 통계를 파이썬으로 받는 라이브러리로,
수십 년치 일봉과 투자자별 매매 같은 긴 시계열에 강합니다. 대신 DART 공시는 다루지 않습니다.
이 사이트는 반대로 확정 종가와 DART 공시·실적을 하루 한 번 정리한 파일을 드립니다 —
겹치지 않으므로 같이 쓰시면 됩니다. 실제로 돌려 확인한 예제와 역할 비교표는
AI 연동 — 다른 도구와 함께 쓰기에 있습니다.
AI 도구에 바로 붙이기
클로드·커서 같은 도구라면 파이썬을 쓰지 않고 MCP 서버로 바로 연결할 수 있습니다. 붙이는 법과 도구 목록은 AI 연동에 있습니다. 영문 문서는 MCP for Korean stocks 입니다.
원천은 금융위원회 공공데이터포털(한국거래소 확정 종가)과 금융감독원 전자공시(DART)입니다. 출처를 표기하면 비영리 목적으로 인용·이용할 수 있고, 상업적 재배포는 허용하지 않습니다. 자세한 것은 인용 방법에 있습니다.