최근 금감원에서 제공하고 있는 데이터를 접근하는 방법에 대해 고민하고 있다.
개인적으로 투자를 하고 있는 상황에서, 현재 금융업종에 종사하고 있지 않는 나에게 많은 데이터를 제공하고 있는 금감원은 사실 가장 중요한 정보의 출처이다.
하지만, 모든 회사에서 제공하는 사업보고서에 있는 내용들을 읽어야 하지만, 이 행위를 조금 더 편리하게 하는 방법에 대해 고민을 하고 있다.
이를 위해서 금감원은 필요한 데이터에 접근을 용이하게 하고, OPEN API를 적극적으로 활용할 수 있도록 최근 새롭게 홈페이지를 개편했다.
아래는 그 홈페이지이다. 옛날 DART 홈페이지보다는 훨씬 깔끔해졌고, 좀더 OPEN API 활용에 초점을 맞춘 듯 하다.
전자공시 OPENDART 시스템
DART의 공시정보 개방전용 홈페이지 「Open DART」서비스의 시범운영을 '20.1.21(화) 부터 실시합니다. 동 서비스에서는 기존 DART 에서 제공중인 「오픈API」와 「공시정보 활용마당」 서비스를 확대 개편하여 보다 다양한 공시정보를 편리하게 활용하실 수 있습니다. ※ 전체 공시서류를 오픈API로 제공할 예정이나, 시범운영기간에는 최근 3개년치의 공시서류를 제공합니다. '소통창구'-'의견수렴' 게시판을 통해 자유롭게 이용 의견을 남겨주시면 서비
opendart.fss.or.kr
여기서 내용들을 살펴보면, 회사의 코드들이 필요한 경우가 많은데 OpenDART에서 제공하는 CORP_CODE.xml 파일을 읽어서 우리가 필요한 코드를 추출해보려고 한다.
구현하려는 코드를 만들기 위해 하는 과정은 아래와 같다.
- XML 파일 데이터 구조를 파악한다. (우리가 필요한 데이터의 모양 파악)
- python에서 해당 XML파일을 읽게 만든다.
- 우리가 필요한 데이터를 찾아서 리스트에 추가한다.
우선, 우리가 데이터를 긁어와야 하는 파일을 살펴보면 아래와 같다.
(방법은 일반적인 웹브라우저에 파일을 드래그&드랍하면 된다.)
회사별로 list를 구성하고 그 아래에 corp_code, corp_name 등등 정보로 구성되어 있다.
이런 데이터를 읽기 위해서 나는 python에서 기본적으로 제공하고 있는 xml.etree.ElementTree 라는 모듈을 사용했다.
import xml.etree.ElementTree as ET
def main():
tree = ET.parse('CORPCODE.xml')
root = tree.getroot()
print(root[0][0].text)
print(root[0][1].text)
if __name__ == "__main__":
main()
데이터를 잘 읽고 있는지 확인하기 위해서 print를 사용했고, 위의 사진과 비교해보면 첫번째 "다코", "00434003"이란 코드가 잘 출력되고 있는 것을 확인할 수 있다.
그럼 XML 파일을 잘 읽는 것은 확인했고, 우리가 원하는 코드와 회사명 데이터를 추출해보자.
추출해서 리스트에 추가하는 코드는 아래와 같다. root =~까지는 동일하고, 밑에 리스트 부분만 추가했다.
import xml.etree.ElementTree as ET
def main():
tree = ET.parse('CORPCODE.xml')
root = tree.getroot()
corp_code_list = [] #코드를 넣어 둘 리스트
corp_name_list = [] #회사명을 넣어 둘 리스트
for i in root.findall('list'): #괄호 안의 element(여기선 'list')를 모두 찾는다.
corp_code_list.append(i[0].text) #해당 element에 있는 [0]번째, 즉 코드를 리스트에 추가
corp_name_list.append(i[1].text) #해당 element에 있는 [1]번째, 회사명을 리스트에 추가
print(corp_code_list[0])
print(corp_name_list[0])
if __name__ == "__main__":
main()
잘 구현됐는지 확인하기 위해서 print를 이용해 위 코드와 동일한 결과가 나오는지 확인해봤고, 결과는 성공이다.
요새는 XML보다는 JSON을 활용하려고 한다지만, 공공데이터를 이용해서 무엇인가를 하려면 XML로 만들어진 경우가 많다.
따라서, XML을 읽는 xml.etree.ElementTree 모듈에 대한 공부가 필요할 수 있다. 더 심화된 내용이 필요하다면, 아래 URL로 들어가서 찾아보면 유용한 내용들을 찾을 수 있을 것이다.
xml.etree.ElementTree — The ElementTree XML API — Python 3.8.2 documentation
Source code: Lib/xml/etree/ElementTree.py The xml.etree.ElementTree module implements a simple and efficient API for parsing and creating XML data. Changed in version 3.3: This module will use a fast implementation whenever available. The xml.etree.cElemen
docs.python.org
주1) 원한다면 앞에서 사용했던 openpyxl 모듈을 이용해 여기에 리스트로 있는 것들을 엑셀에 넣어서 우리가 사용하기 더 편한 형태로 바꿔 사용할 수도 있다. (물론, 여기 코드는 사실 엑셀로 바꿔서 사용할 유인이 없다. 그 이유는 주2에)
주2) 여기서 잘 살펴보면 대략 7만여개 정도 코드가 존재하는데, 이는 금감원에 등록된 모든 회사나 투자기구 등을 포함하고 있다. 아마도 공시 의무가 있는 모든 주체에 대한 정보를 포함하고 있다.
'Python > Data Prep' 카테고리의 다른 글
파이썬으로 여러 페이지에 있는 정부 보도자료 크롤링하기_페이지네이션 | Web Scraping (0) | 2021.10.04 |
---|---|
[Data Prep] 제멋대로인 주소(광역지자체명) 표준화하기 (0) | 2021.08.15 |
[Data Prep] 파이썬을 활용한 공공데이터API 접근하기_미세먼지 통계 | BeautifulSoup, Open API (0) | 2020.03.04 |
[Data Prep] 파이썬 Openpyxl을 이용한 보도자료 내용 저장하기 (0) | 2020.03.02 |
[Data Prep] 파이썬으로 산업부 보도자료 크롤링 하기 (13) | 2020.02.23 |