오늘은 전공 대신에 데이터 수집 관련한 내용을 올리려고 합니다.
데이터 수집 하는 테스트 하는데에 주식정보 만큼 좋은게 없어서 한번
투자공부하는 겸사겸사 dart 사이트에 제공하는 open dart를 활용하는 사용기를 시리즈로 올려보려고 합니다.
오늘은 그중에서 첫번째로 보통 국내 주식은 6자리 숫자 코드로 되어 있는데 open dart에서는 8자리의 별도 기업 코드를 사용하고 있어서 먼저, 그 기업코드를 확보해보도록 하겠습니다.
기업코드는 zip파일로 제공되고 있다고 >여기<에서 설명하고 있습니다.
결론적으로 API Key를 발급받아 crtfc_key=항목에 넣어주고 브라우저의 주소창에 넣어주면
corpCode.xml 파일을 다운로드 받을 수 있습니다.
https://opendart.fss.or.kr/api/corpCode.xml?crtfc_key=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
저장된 파일은 corpCode.xml이라고 하지만 사실은 zip로 압축된 파일!!
파일이름을 corpCode.xml에서 corpCode.zip 으로 변경해주고 압축을 해제하면 우리가 찾는 기업코드를 품고 있는 xml파일을 확인할 수 있습니다.
이 xml 파일에는 약 10만개정도의 기업코드가 기록되어 있는데.. 이는 상장회사 뿐만 아니라 dart에 공시를 올리는 모든 회사의를 구별하기 위한 코드입니다.
xml파일에서 필요한 정보(기업코드)를 뽑아서 tab delimited 파일을 생성하는 스크립트를 작성해보도록 하겠습니다.
import xml.etree.ElementTree as ET
# XML 파일 읽기
tree = ET.parse("CORPCODE.xml")
root = tree.getroot()
# 결과를 저장할 딕셔너리 생성
result = {}
# XML 파일의 각 리스트 항목을 순회
for item in root.findall("list"):
# 회사 이름, 회사 코드, 주식 코드 추출
corp_name = item.find("corp_name").text
corp_code = item.find("corp_code").text
stock_code = item.find("stock_code").text
# 딕셔너리에 추가
if stock_code.strip() == '':
stock_code = '-'
else:
pass
result[corp_code] = {"corp_name":corp_name, "stock_code": stock_code}
ow = open('CORPCODE.txt','w')
for key, value in result.items():
#print (f"{value['stock_code']}\t{value['corp_name']}\t{key}")
ow.write(f"{value['stock_code']}\t{value['corp_name']}\t{key}\n")
ow.close()
출처: @ye._.vely618 |