[웹크롤링] 네이버증권에서 재무제표 가져오기
- Python/웹크롤링
- 2021. 7. 19.
네이버 증권에서 재무제표를 가져오는 방법입니다.
삼성전자를 예로 하겠습니다.
네이버증권에서 삼성전자 검색해서 들어가면 사이트 이름이 다음과 같이 나옵니다.
여기서 '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로 주식데이터 가져오기
'Python > 웹크롤링' 카테고리의 다른 글
[python] dict형식의 string dict으로 변환(json 활용) (0) | 2022.04.21 |
---|---|
[Python] FinanceDataReader로 주식데이터 가져오기 (0) | 2021.08.20 |
뉴스 크롤링하기 (0) | 2020.05.06 |
[Python] BeautifulSoup 간단 사용법 (0) | 2020.04.28 |
requests 모듈(get 방식 크롤링) (0) | 2020.04.26 |