끄적끄적

반응형

# API인증,기업공시 목록 불러와서 공시 선택하는 부분까지 정리


#http://quantkim.blogspot.com/2018/01/dart-api-with.html

#https://blog.naver.com/PostView.nhn?blogId=dreaming2b&logNo=221461315268


#개발가이드 참고

#https://opendart.fss.or.kr/guide/main.do?apiGrpCd=DS001


#공시정보 > 공시검색

#https://opendart.fss.or.kr/guide/detail.do?apiGrpCd=DS001&apiId=2019001



#STEP 1

import pandas as pd

from bs4 import BeautifulSoup

from urllib.request import urlopen

import webbrowser


#STEP 2 요청인자

crtfc_key = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" #API 인증키 (필수)

corp_code = "00126380" #회사고유번호, ※ 개발가이드 > 공시정보 > 고유번호 API조회 가능

bgn_de = "20100101" #시작일, 없으면 종료일

end_de = "" #종료일, 없으면 당일

last_reprt_at = "" #최종보고서만 검색여부(Y or N) 기본값 : N

pblntf_ty = "&pblntf_ty=A&pblntf_ty=B&pblntf_ty=C" #A : 정기공시, B : 주요사항보고, C : 발행공시, D : 지분공시, E : 기타공시, F : 외부감사관련, G : 펀드공시, H : 자산유동화, I : 거래소공시, j : 공정위공시

corp_cls = "" #없으면 전체조회, 법인구분 : Y(유가), K(코스닥), N(코넥스), E(기타)

sort = "" #정렬, 접수일자: date, 회사명 : crp, 보고서명 : rpt, 기본값 : date

sort_mth = "" #정렬방법, 오름차순(asc), 내림차순(desc) 기본값 : desc

page_no = "9999" #페이지 번호(1~n) 기본값 : 1

page_count = "100" #페이지당 건수(1~100) 기본값 : 10, 최대값 : 100


#STEP 3

url = "https://opendart.fss.or.kr/api/list.xml?crtfc_key="+crtfc_key+"&corp_code="+corp_code+"&bgn_de="+bgn_de+"&end_de="+end_de+"&last_reprt_at="+last_reprt_at+"&pblntf_ty="+pblntf_ty+"&corp_cls="+corp_cls+"&sort="+sort+"&sort_mth="+sort_mth+"&page_no="+page_no+"&page_count="+page_count


#STEP 4

resultXML=urlopen(url)  #this is for response of XML

result=resultXML.read() #Using read method


#STEP 5

xmlsoup=BeautifulSoup(result,'html.parser')

#xmlsoup = BeautifulSoup(urlopen(url).read(), 'html.parser') #축약 표현


#print(xmlsoup)

#print(url)


#xml 자료를 깔끔하게 표로 정리를 해서 보여주고

#어떤걸 볼지 input()으로 입력받아


#STEP 6

te=xmlsoup.findAll("list") #- filndall 메소드: 정규식과 매치되는 모든 문자열을 리스트로 돌려줌

#print(te)


data = pd.DataFrame()


for t in te:

    temp = pd.DataFrame(

    ([[t.corp_code.string,t.corp_name.string,t.stock_code.string,t.report_nm.string,

        t.rcept_no.string,t.flr_nm.string,t.rcept_dt.string]]),

        columns = ["corp_code","corp_name","stock_code","report_nm","rcept_no","flr_nm","rcept_dt"])

    data = pd.concat([data,temp]) #pd.concat() 데이터프레임을 합치는 함수


#STEP 7 

data = data.reset_index(drop = True) #concate이후 인덱스 재설정


#OPTIONAL

print(data)

user_num=int(input("몇 번째 보고서를 확인하시겠습니까?"))

url_user="http://dart.fss.or.kr/dsaf001/main.do?rcpNo="+data['rcept_no'][user_num]

webbrowser.open(url_user)



반응형
Please Enable JavaScript!
Mohon Aktifkan Javascript![ Enable JavaScript ]