** 깃허브에서 코드 열기 **
seungyounglim/LittleFox_Investment
Contribute to seungyounglim/LittleFox_Investment development by creating an account on GitHub.
github.com
한국거래소 기업/시세 공시 정보 제공 서비스
한국거래소에서는 기업정보와 시장 정보를 XML 형태로 제공하고 있다. 제공 서비스 URL은 아래와 같다. (참고)
1. 실시간시세_국문: http://asp1.krx.co.kr/servlet/krx.asp.XMLSise?code=단축종목코드
2. 실시간시세_영문: http://asp1.krx.co.kr/servlet/krx.asp.XMLSiseEng?code=단축종목코드
3. 공시정보_국문 : http://asp1.krx.co.kr/servlet/krx.asp.DisList4MainServlet?code=단축코드&gubun=K
4. 공시정보_영문 : http://asp1.krx.co.kr/servlet/krx.asp.DisList4MainServlet?code=단축코드&gubun=E
5. 재무종합_국문 : http://asp1.krx.co.kr/servlet/krx.asp.XMLJemu?code=단축종목코드
6. 재무종합_영문 : http://asp1.krx.co.kr/servlet/krx.asp.XMLJemuEng?code=단축종목코드
7. 재무종합2_국문 : http://asp1.krx.co.kr/servlet/krx.asp.XMLJemu2?code=단축종목코드
8. 재무종합3_국문 : http://asp1.krx.co.kr/servlet/krx.asp.XMLJemu3?code=단축종목코드
9. 텍스트 : http://asp1.krx.co.kr/servlet/krx.asp.XMLText?code=단축종목코드
종목 주가정보 가지고 오기
먼저 필요한 라이브러리를 불러오고, 필요한 사전을 다음과 같이 정의해둔다.
import collections
import pandas as pd
from urllib.request import urlopen
from bs4 import BeautifulSoup
DungRak_map = {"1":"상한","2":"상승","3":"보합","4":"하한","5":"보합"}
mapping = {"JongName":"종목명","CurJuka":"현재가","Debi":"전일대비","DungRak":"등락","PrevJuka":"전일종가","Volume":"거래량","Money":"거래대금","StartJuka":"시가","HighJuka":"고가","LowJuka":"저가","High52":"52주최고","Low52":"52주최저","UpJuka":"상한가","DownJuka":"하한가","Per":"PER","Amount":"상장주식수","FaceJuka":"액면가"}
daily_mapping = {"day_Date":"일자","day_EndPrice":"종가","day_getDebi":"전일대비","day_Dungrak":"전일대비(등락)","day_Start":"시가","day_High":"고가","day_Low":"저가","day_Volume":"거래량","day_getAmount":"거래대금"}
ask_mapping = {"member_memdoMem":"매도상위 증권사","member_memdoVol":"매도 거래량", "member_memsoMem":"매수상위 증권사", "member_mesuoVol":"매수 거래량"}
한국거래소에서 제공하는 URL은 종목의 단축 종목코드를 통해 조회할 수 있다. 단축 종목코드는 구글에 검색하면 알 수 있다.
예를 들어 현대차의 종목코드는 005380이다. 이 종목의 정보를 가지고 오는 코드는 다음과 같다.
STOCK_CODE = "005380"
url="http://asp1.krx.co.kr/servlet/krx.asp.XMLSiseEng?code={}".format(STOCK_CODE)
result=urlopen(url).read()
xmlsoup=BeautifulSoup(result,"lxml-xml")
STOCK_CODE 변수에 조회하고자 하는 종목 코드를 입력하고, 위 코드를 실행하면 시세 정보를 받아와 xmlsoup에 저장한다.
실시간 주가정보 가지고 오기
stock = xmlsoup.find("TBL_StockInfo")
df_data = collections.OrderedDict()
for k, v in stock.attrs.items():
if k == "DungRak": v = DungRak_map[v]
df_data[mapping[k]] = v
stock_df=pd.DataFrame(df_data, index=[0])
stock_df=stock_df.applymap(lambda x: x.replace(",",""))
stock_df
받아온 정보 중 실시간 시세 관련 항목은 "TBL_StockInfo"에서 찾을 수 있다.
위 코드는 영문으로 된 항목을 한글로 변환하고, XML에서 관련 정보를 읽어 pandas 테이블로 저장하는 코드이다.
현대차 시세 관련 정보를 정상적으로 받아온 것을 확인할 수 있다.
일별 시세 가지고 오기
daily_stock = xmlsoup.find("TBL_DailyStock")
daily_stock = daily_stock.find_all("DailyStock")
reverse_dict = {v:k for k, v in daily_mapping.items()}
daily_stock_df = collections.OrderedDict({k:[] for k in list(daily_mapping.values())})
for dat in daily_stock:
for k in daily_stock_df.keys():
if reverse_dict[k] in dat.attrs:
v = dat.attrs[reverse_dict[k]]
if reverse_dict[k] == "day_Dungrak": v = DungRak_map[v]
else:
v = "None"
daily_stock_df[k].append(v)
daily_stock_df=pd.DataFrame(daily_stock_df)
일별 시세는 "TBL_DailyStock" 항목에서 가지고 올 수 있다.
위의 코드를 실행하면 최근 10일간의 주가 변동과 거래량 추이를 볼 수 있다.
매도/매수 상위 증권사 정보
ask_price = xmlsoup.find("TBL_AskPrice")
ask_price = ask_price.find_all("AskPrice")
reverse_dict = {v:k for k, v in ask_mapping.items()}
ask_price_df = collections.OrderedDict({k:[] for k in list(ask_mapping.values())})
for dat in ask_price:
for k in ask_price_df.keys():
if reverse_dict[k] in dat.attrs:
v = dat.attrs[reverse_dict[k]]
else:
v = "None"
ask_price_df[k].append(v)
ask_price_df=pd.DataFrame(ask_price_df)
매도/매수 상위 증권사 정보는 "TBL_AskPrice" 항목에서 가지고 올 수 있다.
다른 정보 가져오기
이번에는 재무정보를 가지고 오기 위해 다른 URL 링크를 사용해보았다.
URL_LINK = {
"실시간시세_국문": "http://asp1.krx.co.kr/servlet/krx.asp.XMLSise?code={}" ,
"실시간시세_영문": "http://asp1.krx.co.kr/servlet/krx.asp.XMLSiseEng?code={}" ,
"공시정보_국문" : "http://asp1.krx.co.kr/servlet/krx.asp.DisList4MainServlet?code={}&gubun=K" ,
"공시정보_영문" : "http://asp1.krx.co.kr/servlet/krx.asp.DisList4MainServlet?code={}&gubun=E" ,
"재무종합_국문" : "http://asp1.krx.co.kr/servlet/krx.asp.XMLJemu?code={}",
"재무종합_영문" : "http://asp1.krx.co.kr/servlet/krx.asp.XMLJemuEng?code={}",
"재무종합2_국문" : "http://asp1.krx.co.kr/servlet/krx.asp.XMLJemu2?code={}",
"재무종합3_국문" : "http://asp1.krx.co.kr/servlet/krx.asp.XMLJemu3?code={}",
"텍스트" : "http://asp1.krx.co.kr/servlet/krx.asp.XMLText?code={}"
}
def get_url (STOCK_CODE , TYPE):
result=urlopen(URL_LINK[TYPE].replace("{}", STOCK_CODE)).read()
return result
종목 코드와 가지고 오고싶은 정보 종류를 입력받아 XML을 리턴하는 함수이다.
하지만 "실시간시세_영문"을 제외하고는 의미 있는 정보를 주는 URL이 없었다.
'재테크 > 투자 팁' 카테고리의 다른 글
지금 챙기지 않으면 손해보는 - 연말정산 소득공제/세액공제 세테크 팁 (3) | 2023.12.02 |
---|---|
연금저축 vs IRP? 세제 혜택을 위한 개인 연금 구성 & 연금저축펀드 팁 (2) | 2023.11.25 |
[투자정보] 주시해야 할 경제 지표/ 투자 정보 사이트 (0) | 2020.08.25 |