본문 바로가기

Language/python

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

반응형

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])

반응형