Fnguide 재무제표데이터 크롤링
https://comp.fnguide.com/SVO2/asp/SVD_FinanceRatio.asp?pGB=1&cID=&MenuYn=Y&ReportGB=D&NewMenuID=104&stkGb=701&gicode=A005930 을 크롤링하는 예제
import pandas as pd
class Fnguide():
def __init__(self, parent=None):
super().__init__()
def crawalFinance(self):
"""
'매출액', '매출총이익', '영업이익', '당기순이익', '자산', '부채', '자본', '영업활동으로인한현금흐름'
:param code:
:return:
"""
sCode = 'A005930' # 삼성전자
url = 'https://comp.fnguide.com/SVO2/asp/SVD_FinanceRatio.asp?pGB=1&cID=&MenuYn=Y&ReportGB=D&NewMenuID=104&stkGb=701&gicode=' + sCode
fr_tables = pd.read_html(url)
temp_df = fr_tables[0]
try:
# print('temp_df.columns[0]', temp_df.columns[0])
temp_df = temp_df.set_index(temp_df.columns[0])
temp_df = temp_df.loc[['유동비율계산에 참여한 계정 펼치기', # 유동비율(유동자산 / 유동부채) * 100
'부채비율계산에 참여한 계정 펼치기', # 부채비율(총부채 / 총자본) * 100
'영업이익률계산에 참여한 계정 펼치기', # 영업이익률(영업이익 / 영업수익) * 100
'ROA계산에 참여한 계정 펼치기', # ROA(당기순이익(연율화) / 총자산(평균)) * 100
'ROIC계산에 참여한 계정 펼치기']] # ROIC(세후영업이익(연율화)/영업투하자본(평균))*100
temp_df.index = ['유동비율', '부채비율', '영업이익률', 'ROA', 'ROIC']
# return temp_df
fs_df = temp_df.astype('float64')
for yyyymm, column in fs_df.iteritems():
print(sCode, yyyymm, column)
except ValueError as e:
print('I got a ValueError - reason "%s"' % str(e))
except KeyError as e:
print('I got a KeyError - reason "%s"' % str(e))
finally:
pass
if __name__ == "__main__":
fnguide = Fnguide()
fnguide.crawalFinance() # '매출액', '매출총이익', '영업이익', '당기순이익', '자산', '부채', '자본', '영업활동으로인한현금흐름'
결과
A005930 2018/12 유동비율 252.9
부채비율 37.0
영업이익률 24.2
ROA 13.8
ROIC 30.4
Name: 2018/12, dtype: float64
A005930 2019/12 유동비율 284.4
부채비율 34.1
영업이익률 12.1
ROA 6.3
ROIC 13.2
Name: 2019/12, dtype: float64
A005930 2020/12 유동비율 262.2
부채비율 37.1
영업이익률 15.2
ROA 7.2
ROIC 17.2
Name: 2020/12, dtype: float64
A005930 2021/12 유동비율 247.6
부채비율 39.9
영업이익률 18.5
ROA 9.9
ROIC 23.9
Name: 2021/12, dtype: float64
A005930 2022/12 유동비율 278.9
부채비율 26.4
영업이익률 14.4
ROA 12.7
ROIC 25.9
Name: 2022/12, dtype: float64