본문 바로가기
크롤링/파이썬 주식 크롤링

[파이썬을 이용한 주식 크롤링] 4.증권플러스 재무제표 가져오기 (2)

by 만다린망고 2020. 7. 21.
반응형

[파이썬을 이용한 주식 크롤링] 4. 증권플러스 재무제표 가져오기 (2)


지난 시간까지 만든 코드는 아래와 같습니다. 


import json

import urllib.request as req  #url 패키지

import pandas as pd



myurl='https://stockplus.com/api/companies/KOREA-A119610/financial_statements.json'

data= req.urlopen(myurl).read()



# decoding to python object


dataj = json.loads(data.decode('utf-8'))


tab=pd.DataFrame(dataj['yearly'])


 

tab에 담겨진 정보를 확인해봅시다. 열이름을 출력합니다. 



중요한 변수들만 설명하면 아래와 같습니다. 각종 지표들은 나중에 차트데이터로 직접 계산할 것입니다. 


baseDate : 날짜

operatingProfit : 영업이익

ownersNetProfit : 순이익

sales : 매출


tab을 출력하면 아래와 같습니다. 



날짜 데이터가 복잡해서, 연도만 남기겠습니다. slice 함수를 이용하여 문자열을 조각내고, 원하는 부분만 가져옵니다. 


for i in range(len(tab.loc[:,['baseDate']])):
    tab.loc[i,['baseDate']]=tab.loc[i,['baseDate']].str.slice(start=0,stop=4,step=1)

tab을 다시 출력하면 아래와 같습니다. basedate에 연도만 남겨졌습니다. 



이제 그래프를 그려봅시다. 먼저 title로 사용하기 위해 회사 이름을 크롤링으로 가져옵시다. 네이버에서 가져왔습니다. 


import requests

from bs4 import BeautifulSoup


url_name=requests.get("https://finance.naver.com/item/main.nhn?code=005930").text

soup=BeautifulSoup(url_name,"html.parser")


name=soup.select("div.wrap_company a")[0].get_text()


div 테그의 클레스 이름은 wrap_company이고, 그 안의 첫번째 a태그의 내용이라는 것을 이용해서 크롤링한 것이다. 




그래프에 한글을 출력하기 위해 아래 코드를 추가합니다. 


from matplotlib import font_manager, rc

my_font = font_manager.FontProperties(fname="c:/Windows/Fonts/malgun.ttf").get_name()

rc('font', family=my_font)


x축은 연도, y축은 순이익으로 그래프를 그려보겠습니다. xticks 함수로 x축 눈금 레이블을 45도 기울였습니다. 


from matplotlib import pyplot as plt


x_dt='baseDate'

y_dt='ownersNetProfit'


plt.xticks(rotation=45)

plt.bar(tab[x_dt],tab[y_dt])

plt.title(name+' '+y_dt)

plt.show()


아래는 그래프입니다. 



전체 코드는 아래와 같습니다. 다음시간에는 이 코드를 약간 변형하여, 원하는 종목의 종목코드를 입력하면 그래프가 출력되도록 만들겠습니다. 


import json

import urllib.request as req  #url 패키지

import pandas as pd


myurl='https://stockplus.com/api/companies/KOREA-A005930/financial_statements.json'

data= req.urlopen(myurl).read()


dataj = json.loads(data.decode('utf-8'))

tab=pd.DataFrame(dataj['yearly'])


for i in range(len(tab.loc[:,['baseDate']])):

    tab.loc[i,['baseDate']]=tab.loc[i,['baseDate']].str.slice(start=0,stop=4,step=1)


import requests

from bs4 import BeautifulSoup


url_name=requests.get("https://finance.naver.com/item/main.nhn?code=005930").text

soup=BeautifulSoup(url_name,"html.parser")


name=soup.select("div.wrap_company a")[0].get_text()


from matplotlib import font_manager, rc

my_font = font_manager.FontProperties(fname="c:/Windows/Fonts/malgun.ttf").get_name()

rc('font', family=my_font)


from matplotlib import pyplot as plt


x_dt='baseDate'

y_dt='ownersNetProfit'


plt.xticks(rotation=45)

plt.bar(tab[x_dt],tab[y_dt])

plt.title(name+' '+y_dt)

plt.show()


반응형

댓글