Language/python

[ Python library ] 특정 기업의 최근 5개 분기 대차대조표 Dataframe으로 반환

물극필반99 2021. 6. 3. 17:38
반응형

import win32com.client
import pythoncom
import pandas as pd
import numpy as np
import time
import requests
import urllib3
from bs4 import BeautifulSoup
import json
import re
urllib3.disable_warnings()

# encparam 추출 함수 : naver증권에서 재무데이터 호출시 encparam이 필요하기 때문에 추출하는 함수
def get_encparam():
    encparam=""
    URL = "https://navercomp.wisereport.co.kr/v2/company/c1010001.aspx?cmp_cd=005930"

    response_data = requests.get(URL, verify=False, headers={'referer': "https://finance.naver.com/item/coinfo.nhn?code=005930"})
    html = response_data.text

    regex = re.compile("encparam.*")
    mo = regex.search(html)
    if mo != None:
        encparam = mo.group()[10:].replace('\'', '')
        #print(mo.group()[10:].replace('\'',''))
    return encparam


# 특정 기업의 최근 5개 분기 대차대조표를 Dataframe으로 반환
def get_balancesheet(shcode):
    df_raw = pd.DataFrame(index=range(0,251),columns=['ACC_NM', 'DATA1', 'DATA2','DATA3','DATA4','DATA5'])
    df_modify = pd.DataFrame(index=range(0,6),columns=range(0,251))

    URL = "https://navercomp.wisereport.co.kr/v2/company/cF3002.aspx?cmp_cd="+ shcode + "&frq=1&rpt=1&finGubun=MAIN&frqTyp=1&cn=&encparam="+get_encparam()
    response_data = requests.get(URL, verify=False, headers={'referer': "https://navercomp.wisereport.co.kr/v2/company/c1030001.aspx?cmp_cd=005930&cn="})

    html = response_data.text
    jsonObject = json.loads(html)
    jsonArray_YYMM = jsonObject.get("YYMM")
    jsonArray_DATA = jsonObject.get("DATA")

    for i in range(len(jsonArray_DATA)):
        df_raw.iloc[i, 0] = jsonArray_DATA[i]['ACC_NM']
        df_raw.iloc[i, 1] = jsonArray_DATA[i]['DATA1']
        df_raw.iloc[i, 2] = jsonArray_DATA[i]['DATA2']
        df_raw.iloc[i, 3] = jsonArray_DATA[i]['DATA3']
        df_raw.iloc[i, 4] = jsonArray_DATA[i]['DATA4']
        df_raw.iloc[i, 5] = jsonArray_DATA[i]['DATA5']

    df_modify = df_raw.transpose()
    df_modify = df_modify.rename(columns=df_modify.iloc[0]) #첫번째 행을 컬럼으로 지정
    df_modify = df_modify.drop(index='ACC_NM')


    # index이름을 분기명으로 변경
    df_modify = df_modify.rename(index={'DATA1': jsonArray_YYMM[0][:7].replace('/','.')})
    df_modify = df_modify.rename(index={'DATA2': jsonArray_YYMM[1][:7].replace('/','.')})
    df_modify = df_modify.rename(index={'DATA3': jsonArray_YYMM[2][:7].replace('/','.')})
    df_modify = df_modify.rename(index={'DATA4': jsonArray_YYMM[3][:7].replace('/','.')})
    df_modify = df_modify.rename(index={'DATA5': jsonArray_YYMM[4][:7].replace('/','.')})

    return df_modify

shcode = "005930" # 삼성전자
print(get_balancesheet(shcode))
print(get_balancesheet(shcode).iloc[0][0])

반응형