728x90
반응형
코드 목적
KOSPI 시장의 거래대금 상위 20개 종목에 대한 공시 정보를 크롤링하고, 결과를 엑셀 파일에 저장하는 과정을 구현한 것입니다. 주요 작업으로는 pykrx를 통한 KOSPI 데이터 수집, XML 파싱, OpenDART API를 사용한 공시 정보 수집 및 결과를 엑셀 파일에 저장합니다.
https://drive.google.com/file/d/1A7dBx8C66RhZWyqNetVcoM9iRmAGCD3F/view?usp=share_link
def disclosure_information_crawling():
import pandas as pd
import datetime
from pykrx import stock
today = datetime.datetime.today() # 오늘 날짜
today_str = datetime.datetime.strftime(today, '%Y%m%d') # 오늘 날짜를 'YYYYMMDD' 형식의 문자열로 변환
today_table_ = stock.get_market_ohlcv(today_str, market="KOSPI") # 오늘 날짜의 KOSPI 시장 OHLCV 데이터
today_table_ = today_table_.sort_values(by=['거래대금'], ascending=False) #'거래대금' 기준으로 내림차순 정렬
tickers_best20 = today_table_.index[:20] # 거래대금이 높은 상위 20개 종목의 티커를 'tickers_best20'에 저장
from xml.etree.ElementTree import parse
# 'CORPCODE.xml' 파일을 파싱하고 XML 트리의 루트 저장
xmlTree = parse('CORPCODE.xml')
root = xmlTree.getroot()
temp_list = root.findall('list') # XML 트리에서 'list' 태그를 모두 찾아 'temp_list'에 저장
list_for_df = []
# 'temp_list'의 각 항목에서 필요한 정보를 추출하여 'list_for_df'에 추가
for i in range(0, len(temp_list)):
temp = temp_list[i]
list_for_df.append([temp.findtext('corp_code'), temp.findtext('corp_name'),
temp.findtext('stock_code'), temp.findtext('modify_date')])
# 'list_for_df'로부터 DataFrame 'corp_code_df'를 생성
corp_code_df = pd.DataFrame(list_for_df, columns=['corp_code', 'corp_name', 'stock_code', 'modify_date'])
# 'corp_code_df'에서 'tickers_best20'에 해당하는 행만 추출하여 'final_list'에 저장
final_list = corp_code_df[corp_code_df['stock_code'].isin(tickers_best20)]
# requests와 BeautifulSoup 라이브러리를 임포트
import requests
from bs4 import BeautifulSoup
# OpenDART API를 사용하기 위한 키와 URL을
key = "이곳에 본인이 발급받은 인증키를 넣으세요"
url = "https://opendart.fss.or.kr/api/list.xml"
# 결과를 저장할 DataFrame 'result'를 초기화
result = pd.DataFrame(columns=['종목명', '거래대금', '공시제목', '공시링크'])
cnt = 1
for i in final_list.index:
# OpenDART API에 전달할 파라미터를 설정
params = {'crtfc_key': key, 'bgn_de': today_str, 'end_de': today_str,
'page_no': 1, 'page_count': 100, 'corp_code': final_list.loc[i, 'corp_code']}
response = requests.get(url, params=params).content.decode('UTF-8') # 설정한 URL과 파라미터로 요청을 보내고 응답을 UTF-8 형식으로 디코딩\
html = BeautifulSoup(response, 'html.parser') # 받은 응답을 HTML로 파싱
res = html.findAll('list') # 파싱된 HTML에서 'list' 태그를 모두 찾아 'res'에 저장
# 각 공시에 대한 정보를 'result' DataFrame에 추가
for j in res:
result.loc[cnt, :] = [final_list.loc[i, 'corp_name'], today_table_.loc[final_list.loc[i, 'stock_code'], '거래대금'],
j.report_nm.text, "https://dart.fss.or.kr/dsaf001/main.do?rcpNo=" + j.rcept_no.text]
cnt += 1
result.set_index(keys=['종목명'], inplace=True, drop=True) # 'result' DataFrame의 인덱스를 '종목명'으로 설정
# 엑셀에 저장
import xlwings
wb = xlwings.Book("원하는 파일명.xlsm")
sheet = wb.sheets[0]
sheet.range('A1').value = result # 엑셀 시트의 A1 셀부터 'result' 데이터를 삽입
wb.save()
wb.close()
.
728x90
반응형
'나의 경험 > 커리어하이 DT 금융업무 자동화 교육' 카테고리의 다른 글
파이썬 pykrx 이용해서 금융데이터 받아 DB 생성하기 (0) | 2024.01.20 |
---|