# 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)
[파이썬] argv[], 재귀함수 (하위폴더검색) (유튜브 보다가 메모) (0) | 2020.08.23 |
---|---|
[파이썬] DART 전자공시 API (JSON) - JSON자료로 해봤다. (0) | 2020.08.19 |
[파이썬] 내장함수, 외장함수 (유튜브 보다가 메모) (0) | 2020.08.18 |
[파이썬] 클래스, 모듈, 패키지, 예외처리 (유튜브 보다가 메모) (0) | 2020.08.18 |
[파이썬] 함수, 사용자입출력, 파일입출력 (유튜브 보다가 메모) (0) | 2020.08.17 |