-
퀀트 프로젝트 | CompanyGuide 재무제표 크롤링Capital/Quant 2024. 3. 29. 18:00
1. CompanyGuide
재무제표는 기본적으로 전자문서 형태로 발행된다. 대부분의 전자문서가 크롤링 기능을 지원하지 않기 때문에, 실적을 확인하기 위해서는 재무제표 문서를 직접 읽어야 한다. 2024년 1월 기준으로, 코스피와 코스닥에 상장되어 있는 종목의 수는 약 2500개이다. 2500개의 재무제표 문서를 일일이 확인하기에는 물리적으로 무리가 있다. 하지만 한 웹사이트를 이용한다면 이 문제를 쉽게 해결할 수 있다. CompanyGuide는 한국거래소 상장 기업의 재무제표를 무료로 제공하는 웹사이트이다. 재무제표 외에도 투자에 참고할만한 재무비율, 투자지표 또한 일목요연하게 정리하여 제공하고 있다. 웹상에 재무제표 정보를 모두 업로드해놓았기 때문에 크롤링하기 용이하다. 아래 링크로 접속하면 CompanyGuide 홈페이지를 살펴볼 수 있다.
2. 재무제표 크롤링
CompanyGuide는 각 종목코드별로 기업의 개요와 재무제표, 재무비율, 투자지표 등을 제공하고 있다. 이번 프로젝트에서는 재무제표를 먼저 살펴볼 것이다. 아래 링크로 접속하면 CompanyGuide에서 제공하는 재무제표를 볼 수 있다. 링크를 따라 접속하면 해당 종목의 연도별 포괄손익계산서, 재무상태표, 현금흐름표가 정리되어 있다. 종목코드를 바꿔가면서 해당 페이지를 크롤링하면 모든 종목의 재무제표를 불러올 수 있을 것이다. 이번 프로젝트에서는 앞서 만들었던 종목코드 파일을 불러온 뒤 CompanyGuide 재무제표 페이지에서 모든 종목의 재무제표를 자동으로 크롤링하는 기능을 파이썬 코드로 구현해보자.
3. 프로젝트
# 라이브러리 추가 import requests import pandas as pd import io import time # 재무제표 크롤링 함수 def crawling_finance(firm_code): url = 'https://comp.fnguide.com/SVO2/ASP/SVD_Finance.asp?pGB=1&cID=&MenuYn=Y&ReportGB=D&NewMenuID=103&stkGb=701&gicode=' + firm_code page = requests.get(url) table = pd.read_html(io.StringIO(page.text)) table1 = table[0] table1 = table1.set_index(table1.columns[0]) table1 = table1[table1.columns[:4]] table1 = table1.loc[['매출액', '매출총이익', '영업이익', '당기순이익']] table2 = table[2] table2 = table2.set_index(table2.columns[0]) table2 = table2.loc[['자산', '부채', '자본']] table2.index = ['자산', '부채', '자본'] table3 = table[4] table3 = table3.set_index(table3.columns[0]) table3 = table3.loc[['영업활동으로인한현금흐름']] total_table = pd.concat([table1, table2, table3]) return total_table # 저장된 종목코드 불러오기 code_data = pd.read_excel('KRX_stock_list.xlsx') code_data = code_data[['Code']] # 재무제표 크롤링 for idx, firm_code in enumerate(code_data['Code']): print(idx + 1, '/', len(code_data['Code'])) try: # 종목별 재무제표 크롤링 try: sub_finance_table = crawling_finance(firm_code) except requests.exceptions.Timeout: time.sleep(60) sub_finance_table = crawling_finance(firm_code) # 종목별 재무제표 정리 for num, col in enumerate(sub_finance_table.columns): temp = pd.DataFrame({firm_code : sub_finance_table[col]}).T temp.columns = [[col] * len(sub_finance_table), temp.columns] if num == 0: temp_arranged = temp else: temp_arranged = pd.merge(temp_arranged, temp, how='outer', left_index=True, right_index=True) # 재무제표 통합 if idx == 0: finance_table = temp_arranged else: finance_table = pd.concat([finance_table, temp_arranged]) except ValueError: continue except KeyError: continue # 재무제표 저장 finance_table.to_excel('finance_table.xlsx')
[함께 읽으면 좋은 페이지]
참고문헌
- 박준규. (2019). 퀀트 전략 파이썬으로 세워라. 비제이퍼블릭.
반응형'Capital > Quant' 카테고리의 다른 글
퀀트 프로젝트 | CompanyGuide 투자지표 PER, PBR 크롤링 (0) 2024.04.12 퀀트 프로젝트 | CompanyGuide 재무비율 ROA, ROE 크롤링 (0) 2024.04.05 퀀트 프로젝트 | FinanceDataReader 코스피 코스닥 종목코드 불러오기 (1) 2024.03.22 추세 지표(2): 정량 모멘텀 (0) 2024.03.15 추세 지표(1): 모멘텀 (1) 2024.02.16