반응형

최근 코로나 이슈로 장이 말그대로 꼬꾸라지고 있다.

이러한 현실에서 도피하기 위해 뉴스를 멀리하고 DART를 둘러보던중

오픈다트라는 것이 생긴것이 아닌가?

기존에도 있었지만 그것을 좀 더 확대 개편을 해서 현재 시범운영 중이라고 한다.

4월 1일부터 정식 서비스 되며 그전까지는 최근 3년치 데이터만 이용 가능하다고 한다.

근데 2월 중으로 업데이트 되기로 한 부분이 아직도 업데이트가 안되고 있는 것으로 보아 연기 될 가능성도 없지않아 있어보인다.

어쨌던 시간이 남아도는 주제에 주식투자하는 시간을 줄이는데 관심이 많은 나로써는 아주 흥미로운 대상이다.

한번 공부해 보자.

 

일단 무슨 언어를 쓸 것인가?

고민 없이 파이썬을 선택한다.

왜냐면 머신러닝과 tensorflow를 공부하면서 최근에서야 파이썬을 사용하게 됐는데

한번 써보니까 데이터 처리용으로 너무 편하다.

그냥 파이썬 쓰자.

 

 

오늘 목표는 각 회사의 재무데이터를 정리하기 위해 일단 고유번호를 가져와서 정리 해 보는거였고.

했다 (?)

(쓸말이 없구만..)

# -*- coding: utf-8 -*-
from urllib.request import urlopen
from zipfile import ZipFile
from io import BytesIO
import xml.etree.ElementTree as elemTree

API_key = "xxxxxxxxxxxxxxxxx"
url = "https://opendart.fss.or.kr/api/corpCode.xml?crtfc_key=" + API_key
resp = urlopen(url)


# 수신된 resp의 bytes를 Buffer에 쌓고 zip file을 로드한다. #도움(맑은안개님): https://youngwonhan-family.tistory.com/6
with ZipFile(BytesIO(resp.read())) as zf:
  file_list = zf.namelist()
  while len(file_list) > 0:
    file_name = file_list.pop()
    corpCode = zf.open(file_name).read().decode()
    


tree = elemTree.fromstring(corpCode)

XML_stocklist = tree.findall("list")
corp_code = [x.findtext("corp_code") for x in XML_stocklist]
corp_name = [x.findtext("corp_name") for x in XML_stocklist]
stock_code = [x.findtext("stock_code") for x in XML_stocklist]
modify_date = [x.findtext("modify_date") for x in XML_stocklist]

stocklist = {}

for i in range(len(corp_code)):
    stocklist[corp_code[i]] = (corp_name[i], stock_code[i], modify_date[i])

for i in corp_code:
    print(stocklist[i])

출력의 일부의 일부. 상장된적이 없는 기업은 stock_code 가 없는 것 같다.

마지막 출력부는 테스트용으로 만들어 놓았는데 길이가 엄청나서 시간을 많이 잡아먹는다. 주의.

중간 쯔음 zipfile 압축푸는 부분은 머리싸메면서 구글링 하다가 누가 만들어 놓았길래 가져왔다.

https://youngwonhan-family.tistory.com/6 감사합니다.

 

데이터 구조는 {corp_code : (corp_name, stock_code, modify_date)} 로 만들었다.

딕셔너리로 만들어 놓으면 검색속도가 빠를 것 같고 내용물은 혹시라도 수정되면 안되니까 튜플로 만들었는데

이렇게 하는게 좋은 건지는 잘 모르겠다.

어쨌던 오늘은 여기까지

 

단일회사 전체 재무제표 기다리고 있습니다. 2월 중 맞는거 겠죠? 일해라 dart

반응형

+ Recent posts