본문 바로가기

기타/주가분석

네이버에서 현금흐름표 데이터 받아오기

728x90

(이 글은 이번에 병행 운영하던 2개의 블로그를 통합하면서 기존 블로그의 내용을 일부 수정하여 옮겨온 글입니다.)

 

 

 

 

기업분석을 위해서 재무제표와 함께 중요한 자료가 바로 현금흐름표입니다.

현금흐름표는 손익계산서, 재무상태표와 함께 재무분석을 위해 중요한 자료로서 일정 기간동안 기업의 현금이 어떻게 조달되고 사용되는지를 보여줍니다.

기간별 현금의 유입과 유출 내용과 같은 현금흐름의 분석을 통하여 향후 발생할 기업의 현금부족, 흑자도산 등의 위험여부도 미리 추정할 수 있습니다.

현금흐름표의 데이터를 받아오기 위하여 며칠간 검색을 해 보았지만 회계학적 입장에서의 현금흐름표의 작성, 분석 방법에 대한 내용만 검색되고 파이썬이나 프로그래밍을 통하여 데이터를 확보하는 방법은 좀처럼 검색되지 않더군요.

그래서 직접 만들어보기로 하고 네이버 금융 서비스 페이지를 계속 둘러보고 살펴본 결과, 왜 해당 포스트가 거의 없는지 이해할 수 있었습니다.

개발자 도구를 통해서 코드를 살펴보면 현금흐름표의 데이터와 관련된 코드는 보이지 않습니다.

소스코드가 아니라 페이지의 각 요소들을 살펴보면 현금흐름표의 데이터를 보여주는 내용이 보이지만 기존의 방식으로 파이썬 코드를 작성하여도 데이터는 None 으로 떨어지는군요.

다양한 방법으로 시도하여도 해당 데이터는 계속 검출되지 않아서 우리가 볼 수 있는 코드가 아니라 외부에서 데이터가 만들어진 후 페이지에 삽입되는 것이라고 추정했습니다.

그래서 네트워크 패킷 이동 내역을 살펴보니 서비스 페이지의 소스코드에서는 보이지 않는 링크가 검출되었습니다.

검출된 링크를 이용하여 코드를 작성, 실행하니 제대로 현금흐름표의 데이터가 수신되는군요.

 

import requests
from bs4 import BeautifulSoup
import pandas as pd
import json

url_tmpl = 'https://companyinfo.stock.naver.com/v1/company/cF3002.aspx?cmp_cd=%s&frq=0&rpt=2&finGubun=MAIN&frqTyp=0&cn=&encparam=**R****i9V****pjd****HUT****'
url = url_tmpl % ('005930')

item_info = requests.get(url).text
soup = BeautifulSoup(item_info, 'html.parser')

data = json.loads(str(soup))
df = pd.DataFrame.from_dict(data['DATA'])

 

수신된 현금흐름표의 데이터 (Json 형태를 가지고 있지만 BeautifulSoup의 데이터라서 변환해 주어야 함)

 

네이버 금융 서비스에서 읽어온 현금흐름표 데이터를 Pandas DataFrame으로 변환한 결과

 

아래의 이미지는 실제 네이버 금융 서비스에서 제공되는 현금흐름표의 화면입니다.

 

 

그런데 문제는 해당 링크만이 아니었습니다.

링크를 살펴보면

"https://companyinfo.stock.naver.com/v1/company/cF3002.aspx?cmp_cd=%s&frq=0&rpt=2&finGubun=MAIN&frqTyp=0&cn=&encparam=**R****i9V****pjd****HUT****"

의 형태를 가지고 있는데 가장 마지막의 파라미터인 encparam 이 문제였습니다.

전달되는 파라미터 중 일부인지 전부인지 아니면 또 다른 내용인지 모르지만 암호화된 문자열이 파라미터로 전달되고 있더군요.

암호화된 문자열이 전달되지 않으면 데이터를 읽어 올 수 없으며 각 기업에 따라 해당 문자열은 다른 값을 가지고 있었습니다.

SK 하이닉스의 경우는

"https://companyinfo.stock.naver.com/v1/company/cF3002.aspx?cmp_cd=000660&frq=0&rpt=2&finGubun=MAIN&frqTyp=0&cn=&encparam=**Y****SN****xK****0****"

의 문자열을 가지고 있었습니다.

자기가 관심을 가지고 있는 종목의 encparam 값을 알고 있다면 문제없지만 모르는 경우에는 직접 찾아서 확인해야 할 것 같네요.(물론 어떤 데이터와 Seed를 이용해서 어떤 알고리즘으로 암호화했는지 알면 생성할 수도 있겠지만 보안 문제 상 알기어려울 것 같습니다.)

따라서 위의 방법을 이용해서 데이터를 가지고 오거나 아니면 확보된 각 재무정보 데이터를 이용해서 현금흐름표를 직접 계산, 작성하는 방법 중에서 선택해야 할 것으로 보입니다.

만약 다른 좋은 방법을 발견한다면 다시 포스트를 남기도록 하겠습니다.

(혹시 몰라서 encparam 값은 변형하여 등록하였습니다.)

 

 

 

 

 

728x90
반응형