주식아빠, 좀버남의 주식 연구소

[주식-프로그래밍] 4. 파이썬 - 주식 전체종목 재무데이터 가져오기 본문

코딩이야기/파이썬

[주식-프로그래밍] 4. 파이썬 - 주식 전체종목 재무데이터 가져오기

좀버남 2020. 5. 25. 00:16

안녕하세요.

2020/05/24 - [코딩이야기/파이썬] - [주식-프로그래밍] 3. 파이썬 크롤링 - 재무데이터 가져오기

 

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

안녕하세요. 이제 주식과 파이썬-크롤링을 접합해보겠습니다. 퓨전!! 우선 재무데이터를 어디서 가져올지 부터 생각을 해야겠죠. 일반 포털 사이트?? FnGuide?? 저는 주로 FnGuide에서 가져와서 사용�

kang-stock-coding.tistory.com

이전 글에 이어서, 재무데이터를 크롤링하는것을 좀더 공부 해보겠습니다.

 

지난 글에서는 단순합니다.

1개 기업의 데이터를 가져옵니다.

 

실제로 좋은 종목을 찾기 위해선 모든 종목들을 펼처 놓고 봐야하겠죠.

그렇다면 전체 종목에 대한 자료가 필요합니다.

 

간단한 예제 5개 기업의 정보를 가져오는 것으로 해보겠습니다.

 

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

 

이전 시간에서 주소창에 위와 같이 입력을 하였습니다.

여기서 조금 트릭이 필요합니다.

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

실제 주소창은 종목 코드가 중간에 위치합니다.

하지만, 실제로 '&'으로 구분된 인자의 순서는 중요하지 않습니다.

 

그러면 이 주소를 바꿔줍니다.

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

이렇게 바꿔 줍니다.

 

대충 느낌이 오시나요??

 

우선 코드를 일부 변경해보겠습니다.

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

위 코드를 아래와 같이 분리합니다.

Code = 'A005930'

url = 'https://comp.fnguide.com/SVO2/ASP/SVD_Finance.asp?pGB=1&cID=&MenuYn=Y&ReportGB=&NewMenuID=103&stkGb=701&gicode' + code

res = requests.get(url)

 

그외 밑에 코드도 수정합니다.

soup, table, 항목을 지워주고, df를 조금 변경합니다.

삭제: soup = BeautifulSoup(res.content,'lxml') 
삭제: table = soup.find_all('table') 

수정: df = pd.read_html(res.text) 

 

 

------전체코드 시작

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

 

Code = 'A005930'

url = 'https://comp.fnguide.com/SVO2/ASP/SVD_Finance.asp?pGB=1&cID=&MenuYn=Y&ReportGB=&NewMenuID=103&stkGb=701&gicode' + code

res = requests.get(url)

df = pd.read_html(res.text)
print( tabulate(df[0], headers='keys', tablefmt='psql') )

------전체코드 끝

 

자 이제 출력을 해보겠습니다.

출력은?? 명령어창에 python '파일이름'을 입력하죠.

저같은 경우는 FS_Table.py로 등록했기에 python FS_Table.py를 입력하면??

주소를 변경하였음에도 이전과 동일한 데이터를 출력하는 것을 확인 가능합니다.

 

자 그럼 이제 5개 기업에 대하여 재무데이터를 출력할 준비가 완료 되었습니다.

5개 기업은? 시가총액 상위 5개 기업으로 선정 했습니다.

A005930(삼성전자), A000660(SK하이닉스), A207940(삼성바이오로직스), A035420(NAVER), A068270(셀트리온)

 

그러면 code의 변수를 배열로 변경하고, url~print까지를 for 반복문을 시켜주면 됩니다.

code = ['A005930','A000660', 'A207940','A035420','A068270']

for code in code:

     url = 'http://comp.fnguide.com/SVO2/ASP/SVD_Finance.asp?pGB=1&cID=&MenuYn=Y&ReportGB=&NewMenuID=103&stkGb=701&gicode=' + code

    requests.get(url)

    df = pd.read_html(res.text) 
    print( tabulate(df[0], headers='keys', tablefmt='psql') )

 

결과는??

 

순차적으로 출력이 됩니다.

 

근데 코드가 왠지 마음에 안듭니다.

 

그래서 함수를 사용합니다.

def 함수명(값):

     함수~~

     return 돌려줄값:

def는 함수를 선언하는 내용입니다.

즉, print만 for반복문에 남기고 다른 내용을 전부 함수로 처리합니다.

 

그러면 code의 배열만 우리가 전체 종목으로 가져오면 되겠죠??

그것은 일단 숙제로 남겨 두겠습니다.(아마 6부에서?)

 

그리고 아래 전체 TABLE의 데이터에서 필요한 데이터만 가져오는 방법을 다음에 공부 해보겠습니다.

 

감사합니다.