코딩이야기/파이썬

[주식-프로그래밍] 3. 파이썬 크롤링 - 재무데이터 가져오기

좀버남 2020. 5. 24. 00:35

안녕하세요.

 

이제 주식과 파이썬-크롤링을 접합해보겠습니다. 퓨전!!

 

우선 재무데이터를 어디서 가져올지 부터 생각을 해야겠죠.

일반 포털 사이트?? FnGuide??

저는 주로 FnGuide에서 가져와서 사용을 하고 네이버증권에서 검증을 하고, 공시를 통해서 한번 더 확인 한답니다.

그러면 당연히 FnGuide에서 재무정보를 가져오도록 하는 코드를 작성하겠죠.

 

국민대표주 '삼성전자'를 통해서 한번 구현해보겠습니다.

삼성전자의 코드번호는? '005930'입니다

아래 화면으로 접속을하기 위한 URL 주소는 아래와 같습니다.

comp.fnguide.com/SVO2/ASP/SVD_Finance.asp?pGB=1&gicode=A005930&cID=&MenuYn=Y&ReportGB=&NewMenuID=103&stkGb=701

 

삼성전자(A005930) | 재무제표 | 기업정보 | Company Guide

삼성전자 005930 | 홈페이지 홈페이지http://www.samsung.com/sec 전화번호 전화번호031-200-1114 | IR 담당자 02)2255-9000 주소 주소경기도 수원시 영통구 삼성로 129 (매탄동) KSE  코스피 전기,

comp.fnguide.com

주소 중간에 gicode=AXXXXXX : 코드번호를 입력하게 되어 있습니다.

그러면 해당 페이지에서 아래 재무표를 이제 크롤링 해보겠습니다.

자 F12를 눌러서 데이터구조를 한번 보죠.

저기 Table의 매출액은 <td class="r"> 매출액 </td>로 구분 되어 있습니다.

이것을 앞선 beutifulsoup으로 가져온다? 매우 복잡한 코딩이 됩니다.

아...복잡한데???쉬운 방법이 없을까??

 

테이블 형태를 그대로 가져오는 아주 좋은 방법이 있습니다.

바로 Pandas라는 라이브러리를 이용합니다.

결과부터 볼까요??

짜잔~~데이터가 잘 넘어 와 있습니다.

 

이 데이터를 가져오는데 필요한 코드는???

단 9줄 입니다.

 

그럼 2부에서 공부한 beautifulsoup이 쓸모 없는거 아니냐??

꼭 그렇지만은 않습니다. 나중에 다 뼈가되고 살이 됩니다.

 

첫번째, 필요한 라이브러리

1) bs4

이건 이미 설치 했습니다

2) pandas

이건 구름을 사용하면 기본적으로 설치 되어있는데요.

혹시 안되어 있다면, 'pip install pandas' 입력하여 설치하면 됩니다.

3) tabulate

제일 중요합니다. 이건 설치 안되어 있구요.

아래와 같이 코드에러가 뜹니다.

그럴땐, 'pip install tabulate' 명령어 입력하여 설치하면 됩니다.

 

전 한번 설치 했었기에, 아래와 같이 이미 설치 했다고 뜨네요^^

전 한번 설치 했었기에, 아래와 같이 이미 설치 했다고 뜨네요^^

구글에서 검색해서보면 아래 처럼 설명이 되어 있답니다^^

뭐 테이블을 이쁘게^^ 해준다고 보면 되죠.

python-tabulate

Pretty-print tabular data in Python, a library and a command-line utility.

The main use cases of the library are:

  • printing small tables without hassle: just one function call, formatting is guided by the data itself
  • authoring tabular data for lightweight plain-text markup: multiple output formats suitable for further editing or transformation
  • readable presentation of mixed textual and numeric data: smart column alignment, configurable number formatting, alignment by a decimal point

이제 코드를 한땀 한땀 입력 해보겠습니다.

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

필요한 라이브러리를 불러온다 생각하면됩니다.

판다스, 뷰티플수프, 그리고 타뷸레이트를 가져왔구요. requests는 기본으로 따라오니 패스~

 

 

그리고 뒤에 아래와 같이 5줄을 입력해주면 끝!!!

res = requests.get("comp.fnguide.com/SVO2/ASP/SVD_Finance.asp?pGB=1&gicode=A005930&cID=&MenuYn=Y&ReportGB=&NewMenuID=103&stkGb=701")

soup = BeautifulSoup(res.content,'lxml')
table = soup.find_all('table')
df = pd.read_html(str(table))
print( tabulate(df[0], headers='keys', tablefmt='psql') )

이보다 쉬울순 없습니다.

url을 열어서, soup에 담습니다. soup에 담긴것 중에서 table data만 골라냅니다. 이것을 pandas를 이용해 잘 조리하구요. tabulate를 이용해서 보기 좋게 사용합니다.

 

 

table = soup.fina_all('table') 은 해당 페이지에서 모든 table을 찾아 냅니다.

 

따라서, 마지막 print문에서 tabulate(df[0],~~~~)대신에 df[1]을 입력하면 어떤 결과가 나올까요??

그렇다면 2를 입력하면??

 

먼저 1을 입력했을때는 분기데이터가 출력 됩니다.

그렇다는것은 0 = 연결의 연간, 1 = 연결의 분기, 2 =? 예측이 되시나요?

페이지의 위에서 아래로 순서대로 Table을 가져오는데, 거기에 맞춰진 탭에 따라서 연간 → 분기 이렇게 이동합니다.

그렇기에 2가 입력이되면 아래 연간 재무상태표가 출력이 될 것입니다.

자 이제 그럼 파이썬을 실행 해보도록 하겠습니다.

나와라 얍!! 이렇게 쉽게 각 페이지의 테이블을 가져 올 수 있답니다.

 

감사합니다.