본문 바로가기
재테크&투자/기업분석

[기업분석] 파이썬을 활용하여 재무 데이터 가져오기 (에프앤가이드)

by 딩동동 2023. 1. 28.

 

오늘은 

여러번의 삽질 끝에 완성된 

"파이썬을 이용하여 기업의 재무데이터 불러오기" 에

대해서 내용을 공유해볼까 합니다.

 

 

step 1

 

* 에프앤가이드에 접속합니다. (https://comp.fnguide.com/)

* 홈페이지 접속 후 재무제표를 클릭하고 주소를 복사합니다. (메모장이나 다른 곳에 붙여놓기)

 

 

step 2

 

한국거래소 홈페이지에서 모든 종목의 종목코드를 엑셀파일 다운로드 합니다.

(http://data.krx.co.kr/contents/MDC/MDI/mdiLoader/index.cmd?menuId=MDC0201020501)

 

(저는 코드 작성을 조금 더 편리하게 하기 위해 종목코드 파일명을 code.xlsx 수정했습니다.

파일명은 자유롭게 수정해서 사용하면 됩니다!)

 

 

step 3

 

파이썬 아나콘다를 실행하여 재무 데이터를 불러와보도록 하겠습니다. 

 

[실행코드]

 

import requests
import pandas as pd
import time

def make_fs_dataframe(code) :
      url ='https://comp.fnguide.com/SVO2/ASP/SVD_Finance.asp?pGB=1&gicode=A'+str(code)+'&cID=&MenuYn=Y&ReportGB=&NewMenuID=103&stkGb=701'

# 복사한 URL을 붙여넣기 한 다음 종목 코드 번호가 적힌 자리에 +str(code)+ 입력합니다.
     
      page=requests.get(url)
      tables=pd.read_html(page.text)
      temp_df=tables[0]                                # 연간데이터만 사용  (분기데이터는 [1])
      temp_df=temp_df.loc[[0,4,15]]             # 매출액, 영업이익, 당기순이익만 추출

      temp_df=temp_df.set_index(temp_df.columns[0])
      temp_df=temp_df[temp_df.columns[:4]]
     
      temp_df2 = tables[2]
      temp_df2 = temp_df2.loc[[0,4,8]]        # 자산, 부채, 자본
      temp_df2 = temp_df2.set_index(temp_df2.columns[0])
     
      temp_df3 = tables[4]
      temp_df3 = temp_df3.loc[[0]]              # 영업현금흐름
      temp_df3 = temp_df3.set_index(temp_df3.columns[0])
      df = pd.concat([temp_df,temp_df2,temp_df3])
      return df

# 대보마그네틱 재무정보를 불러오도록 하겠습니다. 

make_fs_dataframe(290670)  .

 

[실행화면]

 

 

[실행코드]

 

# 데이터프레임을 전치행렬로 바꾸는 함수입니다. 

def change_df(code, dataframe):
      for num, col in enumerate(dataframe.columns):
           temp_df = pd.DataFrame({code:dataframe[col]})
           temp_df = temp_df.T
           temp_df.columns = [[col]*len(dataframe), temp_df.columns]
           if num ==0:
                total_df = temp_df
           else: total_df = pd.merge(total_df, temp_df, how='outer', left_index=True, right_index=True)
      return total_df

# 모든 종목에 대해서 재무데이터를 불러옵니다.
# 한국거래소에서 다운받은 종목코드 엑셀파일을 불러옵니다.

code=pd.read_excel(r'C:\Users\ok\Desktop\code.xlsx')[['종목코드','종목명']]
code['종목코드']=code['종목코드'].map('{:06d}'.format)

for num, code in enumerate(code['종목코드']):
     try:
         print(num,code)
         time.sleep(1)
         try:
             df=make_fs_dataframe(code)
         except requests.exceptions.Timeout:
                time.sleep(60)
                df=make_fs_dataframe(code)
        fs_df_changed = change_df(code, df)
        if num==0:
             total_fs = fs_df_changed
        else:
        total_fs = pd.concat([total_fs, fs_df_changed])
    except :
            continue

# 2,573개의 상장된 모든 종목의 재무데이터를 불러오는데 시간이 약간 소요됩니다.
# 저는 종목코드 엑셀파일에서 제가 보고 싶은 종목만 걸러낸 뒤 불러오기를 했습니다.

# 엑셀데이터로 저장합니다.
total_fs.to_excel('a123.xlsx')

 

[실행화면]

 

 

저장된 엑셀파일을 열면

종목코드에 따라 재무데이터가 제대로 불러와졌음을 알 수 있습니다.

 

 

아직은 파이썬이 어려운 초보인지라...

수 많은 블로그와 책을 참고하였습니다. 

좀 더 쉬운 방법이나 코드가 있다면 댓글 달아주세요 :)

 

다음 시간에는

앞서 분석한 2차 전지 기업들의

재무 데이터와 최근 1년의 주가 추이를 비교해보도록 하겠습니다.

 

 

댓글