[웹크롤링] 네이버증권에서 재무제표 가져오기

반응형
반응형

네이버 증권에서 재무제표를 가져오는 방법입니다. 

 

삼성전자를 예로 하겠습니다.

네이버증권에서 삼성전자 검색해서 들어가면 사이트 이름이 다음과 같이 나옵니다.

 

 

여기서 '005930' 이 종목코드입니다.

이 코드에 따라서 웹페이지가 바뀌는 걸 알 수 있습니다.

이를 이용해 해당 페이지에서 기업실적분석을 가져오려고 합니다.

 

 

크롤링

다음과 같이 입력해 크롤링을 합니다.

단순하게 URL에서 html 가져와서 표는 판다스로 가져올 수 있으니 판다스로 넘겨서 표로 나오게 합니다.

 

import pandas as pd
import requests
code = '005930'
URL = f"https://finance.naver.com/item/main.nhn?code={code}"
r = requests.get(URL)
df = pd.read_html(r.text)[3]

 

 

 

코드 따라서 바뀌니 코드를 입력한대로 URL이 바뀌도록 했습니다.

 

최근연간실적, 최근분기실적 나누기

실제 데이터로써 사용하기 위해서는 정리가 좀 필요해 보입니다. 

먼저 매출액, 영업이익 등등을 인덱스로 만듭시다.

그리고 나서 최근연간실적, 최근분기실적 두개로 나눕니다.

컬럼을 보면 다음과 같이 나옵니다.

 

df.columns

 

제일 위에 있는 판다스에 나와있는 표를 보면 알겠지만 ('주요재무정보','주요재무정보',주요재무정보') 가 매출액,영업이익 등등을 가지고 있습니다.

첫번째 컬럼을 인덱스로 설정합니다.

그리고 ('주요재무정보','주요재무정보',주요재무정보')'주요재무정보' 로 바꿉니다.

 

df.set_index(df.columns[0],inplace=True)
df.index.rename('주요재무정보', inplace=True)

 

 

'IFRS연결' 을 버려야 하니 droplevel을 씁니다. 지금 컬럼은 (0,1,2) 형식의 튜플로 되어있으니 

2번째를 droplevel을 하면 됩니다.

 

df.columns = df.columns.droplevel(2)
df.columns

 

이제 '최근 연간 실적''최근 분기 실적' 으로 나눠봅시다.

멀티인덱서이므로 loc와 xs로 나눠줄 수 있는데 현재 경우는 xs으로 하면 됩니다.

 

annual_data = pd.DataFrame(df).xs('최근 연간 실적',axis=1)
quater_data= pd.DataFrame(df).xs('최근 분기 실적',axis=1)
annual_data

 

 

 

전체 코드

코드 정리하고 마무리 하겠습니다.

 

import pandas as pd
import requests
code = '005930'
URL = f"https://finance.naver.com/item/main.nhn?code={code}"
r = requests.get(URL)
df = pd.read_html(r.text)[3]
df.set_index(df.columns[0],inplace=True)
df.index.rename('주요재무정보', inplace=True)
df.columns = df.columns.droplevel(2)
annual_data = pd.DataFrame(df).xs('최근 연간 실적',axis=1)
quater_data = pd.DataFrame(df).xs('최근 분기 실적',axis=1)

 

 

관련 포스팅

[Python/Pandas] - [Pandas] 멀티인덱스 다루기(loc,xs)

[Python] FinanceDataReader로 주식데이터 가져오기

 

 

Designed by JB FACTORY