벌써 많이 잊어버렸다...
그래도 더 늦기전에!!!
오늘은 어찌보면 시스템 트레이딩을 하는데 있어서 반드시 필요한 데이터인 시장에 상장된 종목정보를 수집해 오는 방법이다.
반드시 필요하다고 한 이유는 아래와 같다.
- 종목정보 중에는 종목 코드가 있는데 이 종목코드가 결국 주가정보, 재무정보 등등을 조회하는데 필수 요소이기 때문이다
- 추후에 증권사 API 를 이용해서 거래를 할 수 있는 프로그램을 만들었다고 가정하자. 이때에도 거래를 할 종목코드를 argument 로 넘겨줘야 하기 때문에 꼭 필요하다
아직 직접 맞닥들이진 못했지만 앞으로 더 많은 곳에서 종목코드를 사용하게 될 것으로 보인다. 아무튼!!! 결국 종목코드 때문이다!!! 이 종목코드를 깔끔하게 제공해 주는 곳을 찾기 시작했다. 그 중에 딱 눈에 들어오는 사이트가 있었으니...
역시 KRX 에서 marketdata 라는 이름으로 제공되는 서비스가 있었다.
다른 블로그를 보면 심심찮게 이 사이트를 이용해서 crawling 을 하는 것을 볼 수 있다.
하지만 나에게 필요한 것은 종목정보!!! 찾아가 보도록 하자!!!
자!!! 이렇게 멋지게 제공해 주고 있다. 심지어 CSV 파일로 다운받을 수 있도록!!!
바로 코딩에 들어갔다...하지만 첫번째 난관에 봉착ㅠ.ㅠ
아마도 KRX에서 KOSCOM을 통해서 이 사이트를 개발할 때 jquery 와 ajax 기술을 사용해서 그냥 python 의 request를 통해서 html 을 추출해 내면 알맹이는 쏙 빠진 껍데기만 조회가 되었다.ㅠ.ㅠ
아래는 그 원인을 찾아보려고 Fiddler를 통해 패킷을 캡쳐해서 본 화면이다.
뭔가 이상했다. GenerateOTP.jspx 라는 페이지로 request 가 보내지는 것이며 MKD로 시작하는 numbering 된 jspx 페이지며...
조금 더 검색을 하다보니...ㅎㅎㅎ나보다 먼저 고민하고 이를 해결한 선배가 있었으니...
물론 이 분께서는 시세정보를 수집하기 위해 작성하셨지만 이분이 위의 페이지에 잘 정리를 해 놓으셔서 내가 원하는 페이지에 적용을 할 수 있었다.
아래는 종목정보를 받아오기 위해 작성한 코드이다.
def getStockInfo():
gen_otp_url = "http://marketdata.krx.co.kr/contents/COM/GenerateOTP.jspx"
gen_otp_data = {
'name': 'fileDown',
'filetype': 'csv',
'url': 'MKD/04/0406/04060100/mkd04060100_01',
'market_gubun': 'ALL',
'isu_cdnm': '전체',
'isu_cd': '',
'isu_nm': '',
'isu_srt_cd': '',
'sort_type': 'A',
'std_ind_cd': '01',
'par_pr': '',
'cpta_scl': '',
'sttl_trm': '',
'lst_stk_vl': '1',
'in_lst_stk_vl': '',
'in_lst_stk_vl2': '',
'cpt': '1',
'in_cpt': '',
'in_cpt2': '',
'isu_cdnm': '전체',
'isu_cd': '',
'mktpartc_no': '',
'isu_srt_cd': '',
'pagePath': '/contents/MKD/04/0406/04060100/MKD04060100.jsp',
}
code = httpRequest(gen_otp_url, gen_otp_data)
down_url = 'http://file.krx.co.kr/download.jspx'
down_data = {
'code': code,
}
response = httpRequest(down_url, down_data)
dic = dataCleansing(response)
dataStore(dic)
| cs |
맨 아래쪽의 dataCleansing은 csv 로 받은 데이터가 의도치 않게 내가 원하지 않는 부분이 있어서 (특히 도로명주소 도입된 후 주소에 콤마가 들어가면서 발생하는 문제가 많음) 이 부분에 대한 처리를 한 것이고 이렇게 정제한 데이터를 저장하도록 한 것이 dataStore 이다
아래는 위의 코드를 통해 저장된 데이터 결과이다.
| result of data storing |
다음번 포스팅에서는 전자공시 사이트에서 공시정보를 수집하는 것에 대해 정리해 보겠다.
No columns to parse from file 그 선배가 풀어놓은 코드를 보면 이런 에러가 나오는데 혹시 발견하셨는지.
답글삭제어떻게 하셨는데 발생했는지요?? 저는 오류없이 잘 쓰고 있어서요
삭제