##현재 시점 코스피,코스닥의 전종목 코드를 가져오자
현재 시점의 코스피와 코스닥의 전종목 코드를 가져오려면 http://marketdata.krx.co.kr/mdi#document=040602 에서 원하는 날짜의 데이터를 CSV로 다운받아 첫 두열을 복사하여 아래 사진과 같이 TXT파일에 저장하면 된다. 저장할때는 종목코드를 6자리로 맞춰 저장해야한다.
그 다음 위에서 저장한 종목코드들을 읽어와 아래 링크를 참조하여 ISIN코드로 바꾸어준다.
https://leesunkyu94.github.io/data%20%EB%A7%8C%EB%93%A4%EA%B8%B0/make-isin/
아래의 코드는 위의 링크를 함수화 한것이다.
def code_to_ISIN ():
data = open ( "code.txt" , "r" ) #저장한 텍스트 파일위치는 유동적으로 설정
code_list = []
temp = data . readlines ()
for i in range ( 0 , len ( temp )): #종목명과 종목코드를 빼고싶으면 0말고 1부터 돌리면 된다.
code_list . append ( temp [ i ]. split ())
for j in range ( 0 , len ( code_list )):
result = 0
for i in range ( 0 , len ( code_list [ j ][ 0 ])):
temp = int ( code_list [ j ][ 0 ][ i ]) * ( 1 + ( i % 2 ))
if temp >= 10 :
result += int ( temp / 10 )
result += int ( temp % 10 )
else :
result += temp
result += 20
isin_code = "KR7" + code_list [ j ][ 0 ] + "00" + str (( 10 - result % 10 ) % 10 )
code_list [ j ][ 0 ] = isin_code
return code_list
code_to_ISIN ()
code_to_ISIN을 호출하면 종목코드가 ISIN으로 바뀌어서 return된다.
ISIN코드를 이용하여 데이터를 받아오자
일별 데이터를 받아오는 방법은 전 포스팅을 첨부하겠다.(https://leesunkyu94.github.io/data%20%EB%A7%8C%EB%93%A4%EA%B8%B0/make_data/) 전포스팅에서 만든 코드를 함수화 해서 보면 아래와 같다.
def get_daily_price ( code ):
gen_otp_url = "http://marketdata.krx.co.kr/contents/COM/GenerateOTP.jspx" + "?url=MKD/04/0402/04020100/mkd04020100t3_02"
gen_otp_data = {
'name' : 'fileDown' ,
'filetype' : 'csv' ,
'isu_cd' : code ,
'adj_stkprc' : 'Y' ,
'fromdate' : '19800101' ,
'todate' : '20190823' ,
}
r = requests . get ( gen_otp_url , params = gen_otp_data )
code = r . text # 리턴받은 값을 아래 요청의 입력으로 사용.
down_url = 'http://file.krx.co.kr/download.jspx'
down_data = {
'code' : code ,
}
r = requests . post ( down_url , data = down_data , headers = {
'Referer' : 'Referer: http://marketdata.krx.co.kr/mdi'
})
r . encoding = "utf-8-sig"
df = pd . read_csv ( BytesIO ( r . content ), header = 0 , thousands = ',' )
return df
위의 두함수를 이용하여 종가만 모으는 코드는 아래와 같다.
code_list = code_to_ISIN ()
data = get_daily_price ( code_list [ 0 ][ 0 ])
data . rename ( columns = { '종가' : code_list [ 0 ][ 1 ]}, inplace = True ) #종가를 종목명으로 바꿔준다.
for j in range ( 1 , len ( code_list )): #앞에서 만든 data를 다른 종목코드를 이용해 받아온 종가와 합쳐준다.
df2 = get_daily_price ( code_list [ j ][ 0 ])
df2 . rename ( columns = { '종가' : code_list [ j ][ 1 ]}, inplace = True )
data = data . join ( df2 [[ code_list [ j ][ 1 ]]])
print ( j )
data = data . drop ( columns = [ '대비' , '거래량(주)' , "거래대금(원)" , "시가" , "고가" , "저가" , "시가총액(백만)" , "상장주식수(주)" ])
data . to_csv ( '코스피코스닥전종목.csv' )
코스피코스닥전종목.csv에 저장이 완료 되었다.
댓글남기기