본문 바로가기

카테고리 없음

파이썬 웹 크롤링 comp.fnguide 재무 데이터 가져오기: pd.read_html()

전업 개발자가 아닌 분들도 파이썬 웹 스크래핑/크롤링에 관심 많은 것 같습니다. 아무래도 다른 분야보다 활용할 수 있는 곳이 다양하기 때문이 아닌가 싶습니다. 그중에서도 특히 개인 투자자 분들이 더 적극적이라는 느낌을 받습니다.

최근에 지인으로부터 재무제표를 수집할 수 있는 방법에 대해서 질문을 받았고, 관련해서 해당 내용을 좀 찾아봤습니다. 네이버 블로그에 이미 해당 내용이 잘 정리된 글이 있어서, 그 코드에 pd.read_html()을 덧붙여 보았습니다.

 

종목코드만 입력하고 코드를 실행하면 해당 기업의 재무 정보를 판다스 데이터프레임 형태로 가져올 수 있습니다.

 

https://blog.naver.com/htk1019/221266979613

 

파이썬 웹 스크레이퍼 만들기 8편. Fnguide 데이터가져오기

Fnguide 데이터를 가져와 보겠습니다. 세종기업데이터는 긴 시계열을 제공해 주는 대신 다양한 계정의 데...

blog.naver.com

 

손익계산서 가져오기

삼성전자(005930)의 손익계산서를 가져오겠습니다. get_html_fnguide() 함수 코드는 위에 소개드린 블로그 링크를 타고 가셔서 확인하시면 됩니다. 오늘 가장 많이 사용하게 될 pd.read_html() 함수는 테이블 태그를 데이터프레임으로 변환시켜주는 기능을 합니다. 

 

 

CompanyGuide 삼성전자 재무제표 페이지에는 총 6개의 table이 존재합니다. 눈으로 보면 3개인데 왜 6개일까요? 그건 연간과 분기로 나누어지기 때문입니다. 연간 3개, 분기 3개로 총 6개가 존재하는 것입니다.

 

len(pd.read_html(get_html_fnguide('005930',gb=0)))

# 6

 

이제부터는 리스트를 인덱싱하는 것처럼 하나씩 확인해보며 내가 원하는 데이터만 집어내면 됩니다. 예를 들어 연간 손익계산서를 가져오고 싶다면 다음과 같습니다.

 

# get_html_fnguide(ticker, gb)
# param ticker: 종목코드 
# param gb: 데이터 종류 (0 : 재무제표, 1 : 재무비율, 2: 투자지표)
profit_loss = pd.read_html(get_html_fnguide('005930',gb=0))[0]
profit_loss

 

 

깔끔하게 잘 정리된 것을 확인할 수 있습니다. 다만, '계산에 참여한 계정 펼치기'라는 쓸데없는 텍스트가 보기 좋지 않습니다. 아래와 같이 코드를 수정하여 지워주겠습니다.

 

profit_loss = pd.read_html(get_html_fnguide('005930',gb=0))[0]
profit_loss.iloc[:,0] = profit_loss.iloc[:,0].str.replace('계산에 참여한 계정 펼치기', '')
profit_loss

 

 

위와 같은 과정을 재무비율, 투자지표 페이지에서도 활용한다면, 종목코드만으로 본인이 원하는 정보만 손쉽게 가져올 수 있습니다. 다만 반목 복문을 이용해서 너무 많은 데이터를 스크래핑하는 것과 같이 서버에 부하를 줄 수 있는 행동, 무분별하게 수집하여 db로 만드는 등 문제가 될 만한 행동은 하지 않는 것이 좋겠습니다. 

 

 

- 이 글은 아나콘다(Anaconda3)가 설치된  주피터 노트북에서 작성되었습니다.