OPEN DART API 중 하나인 지분공시 관련 데이터를 받아 보겠습니다. 전자 공시 데이터를 받아서 분석을 하려면 먼저 데이터를 해석하는 법을 알아야하는데요. 아직 이 부분이 미흡해서 데이터를 받은 후 추후에 보기 좋게 변경해야 할 듯 합니다. 우선 .csv
파일로 저장까지만 해보겠습니다. Open Dart Api를 사용하여 만들어 보고 추후에 합쳐서 하나의 툴로서 사용할 수 있는게 목표입니다.
임원, 주요주주 특정 증권등 소유상황 보고서
먼저 임원, 주요주주 소유보고는 전자공시 사이트에서 지분공시 탭의 임원, 주요주주 특정 증권등 소유상황 보고서의 내용입니다. 테스트로는 삼성전자 코드를 이용했습니다. 전자공시 사이트에서 지분공시를 선택 한 후 아래에 원하는 사항을 체크하고 검색을 합니다.
사진처럼 삼성전자의 임원, 주요주주소유 상황에 대한 변동 공시를 볼 수 있습니다. 이걸 OPEN DART API를 통해서 받아보려고 합니다.
지분공시 API 요청
요청 URL
은 2가지가 있습니다. 하나는 JSON
포멧, 하나는 XML
입니다. 저는 JSON
을 더 선호하여서 위의 URL
을 이용했습니다.
요청인자 입니다. 발급받은 API 인증키
와, 회사의고유 번호
를 인자로 전달해줘야합니다.회사 고유번호를 저장하는 건 아래를 참고해주세요.
전자공시 오픈 API 호출 결과입니다.
Open API 테스트를 해볼 수 있습니다. 00126380
은 삼성전자의 고유 번호입니다.
Python 코드
import requests
import json
import pandas
crtfc_key = 'api인증키'
url = f"https://opendart.fss.or.kr/api/elestock.json?crtfc_key={crtfc_key}&corp_code=00126380"
response = requests.get(url)
dic_response = response.json()
print(dic_response)
먼저 요청 url을 만들어 줍니다. 테스트에도 요청 url을 볼 수 있기 때문에 저 형태로 만들어줍니다. 결과로 Json 형태로 받기로 했는데요. 딕셔너리로 저장을 해줍시다. 그리고 출력을 하여 데이터를 확인합니다.
아직 어떤 데이터인지 모르지만 잘오고 있습니다. 여기서 보면 key 값이 전부 영어로 되어있고, 의미를 줄여서 사용했기 때문에 ket 값만 봤을때 해당 값이 어떤 한 걸 의미하는지 잘 와닿지가 않습니다. 그래서 저는 한글을 이용하였습니다. (파이썬은 한글 사용이 가능합니다.)
def keyTokor(key):
if key == "rcept_dt":
return "접수일자"
elif key == "repror":
return "보고자"
elif key == "isu_exctv_rgist_at":
return "발행 회사 관계 임원(등기여부)"
elif key == "isu_exctv_ofcps":
return "발행 회사 관계 임원 직위"
elif key == "isu_main_shrholdr":
return "발행 회사 관계 주요 주주"
elif key == "sp_stock_lmp_cnt":
return "특정 증권 등 소유 수"
elif key == "sp_stock_lmp_irds_cnt":
return "특정 증권 등 소유 증감 수"
elif key == "sp_stock_lmp_rate":
return "특정 증권 등 소유 비율"
elif key == "sp_stock_lmp_irds_rate":
return "특정 증권 등 소유 증감 비율"
else:
return ""
함수를 하나 만들어서 key에 맞는 한글의미를 리턴 시켜줬습니다.
input_df = {
"접수일자": [],
"보고자": [],
"발행 회사 관계 임원(등기여부)": [],
"발행 회사 관계 임원 직위": [],
"발행 회사 관계 주요 주주": [],
"특정 증권 등 소유 수": [],
"특정 증권 등 소유 증감 수": [],
"특정 증권 등 소유 비율": [],
"특정 증권 등 소유 증감 비율": [],
}
for item in dic_response["list"]:
for key in item.keys():
if keyTokor(key) == "":
continue
if keyTokor(key) in input_df:
input_df[keyTokor(key)].append(item[key])
else:
input_df[keyTokor(key)] = [item[key]]
df = pandas.DataFrame(input_df)
df.to_csv('삼성.csv')
pandas
를 이용하기 위해서 딕셔너리 포맷을 만들어줬습니다. 더 많은 키가 있었는데요, 우선 사용할 것들만 추렸습니다. 받은 API 결과에서 "list"
에 데이터가 담겨져있습니다. 반복문을 통해서 input_df
에 있는 Key
일 경우에만 데이터를 넣어줬습니다. .csv
파일을 써서 만들어도 되지만 pandas
를 이용해 봤습니다.
Key를 한글로 변경하지 않았으면 이 부분들이 rcept_dt
이런식으로 표시가 되어서 보기가 어려웠을 거 같네요.
완성된 삼성.csv
파일 일부내용입니다. 상단에 전자공시 사이트에서 검색한 결과와 동일하네요. 실제 내용은 어떤 걸 봐야할지는 아직 모르겠지만 차차 공부해봐야겠습니다. 파이썬을 스크래핑 할 때에 잠깐 써본 경험 밖에 없어서 원하는 걸 만들어 보려고 하니 생각 보다 쉽지 않네요. 그래도 공부도 할겸 계속 해봐야겠습니다.