[파이썬] Open API

2022. 12. 28. 13:14자격증(다다익선)/파이썬

728x90

https://chanytv.tistory.com/137

 

[파이썬] 변수&기본연산 / 리스트,딕셔너리 / 함수 / 조건문 / 반복문

[파이썬] 변수&기본연산 / 리스트,딕셔너리 / 함수 / 조건문 / 반복문 파이썬 기초를 시작하면서.... 크롤링 한 번 해보자고 시작한 파이썬 공부다. 모든 공부는 기초가 중요한 법!! 이 번 공부로 파

chanytv.tistory.com

https://chanytv.tistory.com/138

 

[파이썬] 스크래핑(크롤링)

https://chanytv.tistory.com/137 [파이썬] 변수&기본연산 / 리스트,딕셔너리 / 함수 / 조건문 / 반복문 [파이썬] 변수&기본연산 / 리스트,딕셔너리 / 함수 / 조건문 / 반복문 파이썬 기초를 시작하면서.... 크

chanytv.tistory.com

https://chanytv.tistory.com/139

 

[파이썬] openpyxl / 파일 업로드, 다운로드

https://chanytv.tistory.com/137 [파이썬] 변수&기본연산 / 리스트,딕셔너리 / 함수 / 조건문 / 반복문 [파이썬] 변수&기본연산 / 리스트,딕셔너리 / 함수 / 조건문 / 반복문 파이썬 기초를 시작하면서.... 크

chanytv.tistory.com

https://chanytv.tistory.com/142

 

[파이썬] Pandas와 DataFrame

https://chanytv.tistory.com/137 [파이썬] 변수&기본연산 / 리스트,딕셔너리 / 함수 / 조건문 / 반복문 [파이썬] 변수&기본연산 / 리스트,딕셔너리 / 함수 / 조건문 / 반복문 파이썬 기초를 시작하면서.... 크

chanytv.tistory.com

https://chanytv.tistory.com/143

 

[파이썬] yfinance을 이용한 해외 주식 정보 분석

https://chanytv.tistory.com/137 [파이썬] 변수&기본연산 / 리스트,딕셔너리 / 함수 / 조건문 / 반복문 [파이썬] 변수&기본연산 / 리스트,딕셔너리 / 함수 / 조건문 / 반복문 파이썬 기초를 시작하면서.... 크

chanytv.tistory.com

[파이썬] Open API


Open API란?

크롤링이랑은 조금 다른 개념인 듯하다. 크롤링은 내가 보고 있는 웹브라우저 화면에 내용을 가져오는 거라면 Open API는 많이 찾는 정보를 미리 모아두고 필요한 사람들은 무료로 가져가라~라는 식이랄까?ㅋㅋ

 

뭐 암튼 그런거다.

 

이 번 강의가 좀 기대가 됐던 게 사실 API란 걸 전부터 꼭 써먹어 보고 싶었기 때문이다. 유일하게 하는 게임이 '피파온라인 4'인데 넥슨에서 피파 관련 Open API를 제공하기 때문이다. 개인적으로 친구들과의 대전을 기록하고 분석하는 것을 좋아하다 보니 API를 활용하면 좋겠다는 생각을 많이 했는데 이번에 확실히 배워서 제대로 써먹었으면 하는 바람이다.

 

강의에선 'DART'는 사이트에서 제공하는 Open API를 사용한다.

 

Open API를 사용하기 전 먼저 해야 할게 Key 발급이다. 발급은 DART사이트에서 회원가입 후 발급받으면 된다.

그다음으로 해야 할 것은 역시나 환경구성이다. DART에서 제공하는 가이드가 있으니 처음은 가이드를 따라서 환경 구성을 해주면 된다.

https://dart-fss.readthedocs.io/en/latest/

 

DART-FSS — dart-fss documentation v0.3.10 documentation

© Copyright 2021, Sungwoo Jo Revision 60fa916c.

dart-fss.readthedocs.io

!pip install dart-fss

import dart_fss as dart_fss
import pandas as pd

api_key = '여기에 API 키를 입력'
dart_fss.set_api_key(api_key=api_key)

corp_list = dart_fss.get_corp_list()

corp_list.corps

위와 같이 하면 일단 구동을 위한 준비는 끝났다.

 

가이드에서 제공하는 코드를 이용하면 전체 종목들을 불러올 수 있다. 데이터를 불러오기까지 성공했다면, 필요한 정보들만 추려서 정리할 줄만 알면 끝나는 거 아니겠는가?

# 전체 종목을 보는 코드
all = dart_fss.api.filings.get_corp_code()
all[0]

# DataFrame 형태로 변형
df = pd.DataFrame(all)

df

# 상장사 항목 조회
df_listed = df[df['stock_code'].notnull()]

# 비상장사 항목 조회
df_non_listed = df[df['stock_code'].isnull()]

더불어 전에 배웠던 pandas 기능 중 엑셀로 저장하는 코드를 이용해 엑셀 파일로도 저장이 가능하다.

df_listed.to_excel('비상장사.xlsx')

df_non_listed.to_excel('상장사.xlsx')

몇 가지 더 데이터를 정리하는 방법에 대해서 알아보자.

# 한 개 종목을 정해서 코드를 찾기
corp_code = df_listed[df_listed['corp_name'] == '삼성전자'].iloc[0,0]

corp_code

dart api 를 사용해보기(사업보고서)
corp_code = df_listed[df_listed['corp_name'] == '카카오'].iloc[0,0]
dart_fss.api.filings.get_corp_info(corp_code) # 기업 정보
data = dart_fss.api.info.unrst_exctv_mendng_sttus(corp_code, '2021', '11011') # 미등기임원 보수 총액
data = dart_fss.api.info.irds_sttus(corp_code, '2021', '11011') # 증자(감자)현황
data = dart_fss.api.info.alot_matter(corp_code, '2021', '11011') # 배당 현황
data = dart_fss.api.info.exctv_sttus(corp_code, '2021', '11011') # 임원 현황
data = dart_fss.api.info.emp_sttus(corp_code, '2021', '11011') # 남녀 평균 급여
data = dart_fss.api.info.hmv_audit_indvdl_by_sttus(corp_code, '2021', '11011') # 이사 보수
data = dart_fss.api.info.indvdl_by_pay(corp_code, '2021', '11011') # 연봉 top 5
data = dart_fss.api.info.otr_cpr_invstmnt_sttus(corp_code, '2021', '11011') # 타법인 출자 현황
data = dart_fss.api.finance.fnltt_singl_acnt(corp_code, '2021', '11011') # 재무제표의 3년 치 주요 정보
data = dart_fss.api.shareholder.elestock(corp_code) # 임원, 주요 주주 소유 보고

뭐 대충 테스트를 돌려봤으니 이제 대량으로 받아서 항목을 정리해 보자.

당연히 대량은 반복문과 if문을 활용하면 된다.

def get_salary_top(name):
  corp_code = df_listed[df_listed['corp_name'] == name].iloc[0,0]
  data = dart_fss.api.info.indvdl_by_pay(corp_code, '2021', '11011')
  
  df_temp = pd.DataFrame(data['list'])
  df_temp = df_temp[['corp_name','nm','ofcps','mendng_totamt']]
  df_temp.columns = ['기업명','이름','역할','보수']
  df_temp['보수'] = pd.to_numeric(df_temp['보수'].str.replace(',',''))
  df_temp = df_temp.sort_values(by='보수',ascending=False)
  
  return df_temp
  
  names = ['삼성전자','LG에너지솔루션','SK하이닉스','NAVER','삼성바이오로직스','삼성전자우','카카오','삼성SDI','현대차','LG화학','기아','POSCO홀딩스','KB금융','카카오뱅크','셀트리온','신한지주','삼성물산','현대모비스','SK이노베이션','LG전자','카카오페이','SK','한국전력','크래프톤','하나금융지주','LG생활건강','HMM','삼성생명','하이브','두산중공업','SK텔레콤','삼성전기','SK바이오사이언스','LG','S-Oil','고려아연','KT&G','우리금융지주','대한항공','삼성에스디에스','현대중공업','엔씨소프트','삼성화재','아모레퍼시픽','KT','포스코케미칼','넷마블','SK아이이테크놀로지','LG이노텍','기업은행']

dfs = []

for name in names:
  try:
    df = get_salary_top(name)
    dfs.append(df)
  except:
    print(f'없음 - {name}')

df_result = pd.concat(dfs)

df_result.sort_values(by='보수',ascending=False).head(30)

반복문에 'try'랑 'except'는 첨 써보는 것 같은데 관련 링크는 아래 걸어두겠다. 예외를 처리하는 방법이다.

https://wikidocs.net/30

 

05-4 예외 처리

프로그램을 만들다 보면 수없이 많은 오류를 만나게 된다. 물론 오류가 발생하는 이유는 프로그램이 잘못 동작하는 것을 막기 위한 파이썬의 배려이다. 이번 장에서는 파이썬에서 오류를…

wikidocs.net

더불어 데이터 프레임을 합치는 방법인 'concat'대해서도 링크 걸어둔다.

https://ordo.tistory.com/51

 

[Python] 데이터프레임 결합 (.concat, .append)

안녕하세요. 우주신 입니다. 파이썬에서 데이터프레임을 합치는 여러가지 방법이 있지만, 오늘은 concat, append 두 가지 함수에 대해 포스팅 해보겠습니다. 두 데이터프레임을 합치고 싶은데 의도

ordo.tistory.com

 

728x90