(크롤링) 한국증권거래소KRX_전 종목 가격 Data불러오기
네이버 크롤링에 이어
KRX증권거래소 전종목 가격을 불러와보려고 한다.
그 이유는 전 종목의 코드가 들어있기도 하고,
무엇보다 "시가총액" 데이터가 들어있기 때문이다.
확인해보니 1995년 5월 부터의 데이터가 들어있었기 때문에 충분? 하다고 생각
어쨌든 주가보다는 시가총액이 종목 가치를 나타내는 더 정확한 지표이기 때문에
, KRX에서 데이터를 다운받을 수 있다면 정말 좋겠다고 생각했다.
오늘 받아올 것은
- KOSPI 전종목 리스트
- 종목별, 일자별 시가총액 데이터
KOSPI 전종목 리스트
위 화면에서 '조회' 버튼을 누르면 'getJsonData.cmd'가 호출 되는데 이를 살펴보면 다음과 같다
코드
import requests
import pandas as pd
import json
#주식 종목 받기 함수
def getStockList():
#요청 Url
requestUrl = 'http://data.krx.co.kr/comm/bldAttendant/getJsonData.cmd'
#요청시 넘겨줄 pramaters
params ={
'bld': 'dbms/MDC/STAT/standard/MDCSTAT01901',
'locale': 'ko_KR',
'mktId': 'ALL',
'share': '1',
'csvxls_isNo': 'false'
}
#요청시 헤더 정보
headers = {
'Referer': 'http://data.krx.co.kr/contents/MDC/MDI/mdiLoader/index.cmd?menuId=MDC0201',
'Upgrade-Insecure-Requests': '1',
# HTTP Content-Security-Policy (CSP) upgrade-insecure-requests 지시문은
# 사이트의 모든 비보안 URL(HTTP를 통해 제공되는 URL)을
# 보안 URL(HTTPS를 통해 제공되는)로 대체된 것처럼 처리하도록 사용자 에이전트에 지시
# [출처] http 헤더 Upgrade-Insecure-Requests|작성자 겨울나무
'User-Agent': 'Mozilla/5.0'
}
response = requests.get(requestUrl, params, headers=headers)
#Byte정보 --> decode --> jason --> dataframe
dataByte = response.content
dataDecoded = dataByte.decode('utf8')
data = json.loads(dataDecoded)
dataJson = json.dumps(data, indent=4, sort_keys=True)
df = pd.read_json(dataJson)
df = df['OutBlock_1']
print(type(df[0]), df[0])
newDf = pd.DataFrame(data=[df[0]])
for i in range(1, df.size):
newDf = pd.concat([newDf, pd.DataFrame(data=[df[i]])], ignore_index=True)
return newDf
#리스트 정보 받아와서
stocksDf = getStockList()
#날짜순으로 정리
stocksDf = stocksDf.sort_values(by="ISU_SRT_CD", ascending= True)
#저장
stocksDf.to_csv('경로/파일이름')
결과
종목별, 일자별, 시가총액
위 화면에서 '조회' 버튼을 누르면 'getJsonData.cmd'가 호출 되는데 이를 살펴보면 다음과 같다
코드
from time import sleep
import requests
import pandas as pd
from datetime import datetime
import json
path = '저장경로'
today = datetime.now().strftime("%Y%m%d")
#받아온 리스트 불러오기
def getCodeList(columnName):
df = pd.read_csv('경로/파일이름')
list = df[columnName].values.tolist()
return list
#종목별로 가격데이터 크롤링
def getStockPriceDataFromKRX(fCode, sCode, stockName):
# 요청 주소
requestUrl = 'http://data.krx.co.kr/comm/bldAttendant/getJsonData.cmd'
# 요청시 넘겨줄 인자, payload에서 볼 수 있음
params = {
'bld': 'dbms/MDC/STAT/standard/MDCSTAT01701',
'locale': 'ko_KR',
'tboxisuCd_finder_stkisu0_2': sCode + '/' + stockName,
'isuCd': fCode,
'isuCd2': fCode,
'codeNmisuCd_finder_stkisu0_2': stockName,
'param1isuCd_finder_stkisu0_2': 'ALL',
'strtDd': '19950502',
'endDd': today,
'share': '1',
'money': '1',
'csvxls_isNo': 'false'
}
#request header
headers = {
'Referer': 'http://data.krx.co.kr/contents/MDC/MDI/mdiLoader/index.cmd?menuId=MDC0201',
'Upgrade-Insecure-Requests': '1',
# HTTP Content-Security-Policy (CSP) upgrade-insecure-requests 지시문은
# 사이트의 모든 비보안 URL(HTTP를 통해 제공되는 URL)을
# 보안 URL(HTTPS를 통해 제공되는)로 대체된 것처럼 처리하도록 사용자 에이전트에 지시
# [출처] http 헤더 Upgrade-Insecure-Requests|작성자 겨울나무
'User-Agent': 'Mozilla/5.0'
}
# 서버에 요청
response = requests.get(requestUrl, params, headers=headers)
#요청받은 자료=Byte --> jason --> dataframe
dataByte = response.content
dataDecoded = dataByte.decode('utf8')
data = json.loads(dataDecoded)
dataJson = json.dumps(data, indent=4, sort_keys=True)
df = pd.read_json(dataJson)
df = df['output']
newDf = pd.DataFrame(data=[df[0]])
for i in range(1, df.size):
newDf = pd.concat([newDf, pd.DataFrame(data=[df[i]])], ignore_index=True)
return newDf
#종목 리스트에서 간편코드, 풀코드, 종목명 불러오기
fCodeList = getCodeList('ISU_CD')
sCodeList = getCodeList('ISU_SRT_CD')
nameList = getCodeList('ISU_ABBRV')
stockPriceDf = getStockPriceDataFromKRX(fCodeList[0], sCodeList[0], nameList[0])
dfFinal = pd.DataFrame({'TRD_DD': stockPriceDf['TRD_DD']}) #TRD_DD=날짜 column 가진 파일 생성
#각 종목별로 가격데이터 크롤링
for i in range (0, len(sCodeList)):
print ("current trial is {}/{}".format(i, len(sCodeList)) + nameList[i])
rawDf = getStockPriceDataFromKRX(fCodeList[i], sCodeList[i], nameList[i])
#시가총액 부분만 불러와서 붙이기
tempDf = pd.DataFrame({'TRD_DD' : rawDf['TRD_DD'], nameList[i] : rawDf['ACC_TRDVAL']})
dfFinal = pd.merge(dfFinal, tempDf, how = 'outer', on='TRD_DD')
dfFinal.to_csv(path + 'KRX_PriceAll_1') # 저장
sleep(5)
print('all done')
결과
끝.
참고사이트
http://data.krx.co.kr/contents/MDC/MDI/mdiLoader/index.cmd?menuId=MDC0201020201
KRX 정보데이터시스템
증권·파생상품의 시장정보(Marketdata), 공매도정보, 투자분석정보(SMILE) 등 한국거래소의 정보데이터를 통합하여 제공 서비스
data.krx.co.kr
https://blog.naver.com/ellijahbyeon/222213048898
한국거래소 KRX 정보데이터시스템 주식 시세 크롤링
한국거래소에서 시장정보포털 <KRX 정보데이터시스템>(http://data.krx.co.kr)을 새롭게 오픈함에...
blog.naver.com
https://blog.naver.com/patent21/222037336954
[공유] krx-stock-api
krx-stock-api krx-stock-api는 간편하게 한국거래소(KRX)의 API를 사용할 수 있는 라이브러리입니다...
blog.naver.com