일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 티스토리
- 하이라이트
- 의사 클래스
- idxmax
- pycharm
- idxmin
- 필기
- 금융결제원
- HTML
- 금결원
- multiprocessing
- 퀀트
- OpenAPI+
- QueueHandler
- Windows
- 웹크롤링
- 멀티 로그인
- 진행 상황
- highlight.js
- CSS
- 우리FIS
- line number
- DataFrame
- 파이썬
- 코드블럭
- Python
- pywinauto
- 구현
- freeze_support
- Tistory
- Today
- Total
맨땅에 헤딩하는 사람
WICS 섹터 기업 업종 json 포맷 웹크롤링 | python 본문
먼저 이 포스트는 아래 블로그를 기반으로 작성되었다.
http://blog.naver.com/tmddn3020/221851801072
주식 DB를 구축하기 위해 가장 먼저 기업의 리스트를 DB화 해야한다. 모든 상장 기업을 반영하는 것은 물론 좋겠지만 데이터 공백이 존재할 수 있다는 점을 염려해서 WICS 중분류로 나뉘어진 기업의 리스트만을 DB화하기로 결정하였다. WICS에 대해 자세히 알고 싶은 사람은 내가 전에 올렸던 글을 참고바란다.
2020/07/16 - [퀀트/이론] - WICS FICS GICS KRX지수 산업분류란?
웹크롤링 URL 확인
아래 링크에서 WiseIndex의 WICS 중분류 기업 목록을 확인할 수 있다.
http://www.wiseindex.com/Index/Index#/G1010
그리고 아래 그림처럼 해당 사이트에서 어떤 URL로부터 데이터를 요구하여 통신하는 지 확인이 가능하다.
물론 해당 사이트에서 Selenium을 이용한 동적 웹크롤링도 가능하지만 Request URL을 안다면 훨씬 빠르고 쉽게 크롤링이 가능하다. 확인 방법은 다음과 같다.
- 해당 사이트 접속 후 개발자모드(F12) 실행 → Network 클릭
- 사이트에서 Components 탭 클릭
- GetIndexComponets?ceil_yn=0&dt=20200716&sec_cd=G1010 클릭
- Headers 탭 클릭 후 Request URL에 해당하는 주소 복사
Headers 탭에서 아래로 내려가다보면 Response Headers에 Content-Type: application/json; charset=utf-8을 통해 json 포맷으로 데이터를 통신한다는 것을 알 수 있다. json은 간단하게 데이터 교환 시 사용하는 데이터의 형식이다. 주로 인터넷에서 자료를 주고받을 때 많이 사용되며 "키-값 쌍"으로 이루어져 있다. (파이썬의 dictionary 타입을 생각하면 된다.)
해당 URL에서 'dt'에 날짜, 'sec_cd'에 WICS 코드를 넣으면 원하는 데이터를 수신할 수 있다는 사실을 알았다. WICS 코드는 WiseIndex 사이트에서 쉽게 확인할 수 있다.
http://www.wiseindex.com/About/WICS
구현 코드
코드는 두 개(qconfig.py, crowling_cmp_sec.py)로 이루어지며 qconfig.py는 설정, crowling_cmp_sec.py는 로직을 담당한다.
qconfig.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
wics_lc = {10:'에너지',
15:'소재',
20:'산업재',
25:'경기관련소비재',
30:'필수소비재',
35:'건강관리',
40:'금융',
45:'IT',
50:'커뮤니케이션서비스',
55:'유틸리티'}
wics_mc = {1010:'에너지',
1510:'소재',
2010:'자본재',
2020:'상업서비스와공급품',
2030:'운송',
2510:'자동차와부품',
2520:'내구소비재와의류',
2530:'호텔,레스토랑,레저 등',
2550:'소매(유통)',
2560:'교육서비스',
3010:'식품과기본식료품소매',
3020:'식품,음료,담배',
3030:'가정용품과개인용품',
3510:'건강관리장비와서비스',
3520:'제약과생물공학',
4010:'은행',
4020:'증권',
4030:'다각화된금융',
4040:'보험',
4050:'부동산',
4510:'소프트웨어와서비스',
4520:'기술하드웨어와장비',
4530:'반도체와반도체장비',
4535:'전자와 전기제품',
4540:'디스플레이',
5010:'전기통신서비스',
5020:'미디어와엔터테인먼트',
5510:'유틸리티'}
def wics_url(date, wics_code):
'''
Parameter
- date[str] : the date corresponding data (yyyymmdd)
- wics_code[int] : the wics code corresponding data (use wics_lc or wics_mc)
Return
- url[str]
'''
url ='http://www.wiseindex.com/Index/GetIndexComponets?ceil_yn=0&'\
'dt=' + date + '&sec_cd=G' + str(wics_code)
return url
def comp_url(code):
'''
Parameter
- code[str] : the company code corresponding data
Return
- url[str]
'''
url = 'http://comp.fnguide.com/SVO2/ASP/SVD_Main.asp?pGB=1&'\
'gicode=A' + code + \
'&cID=&MenuYn=Y&ReportGB=&NewMenuID=Y&stkGb=701'
return url
|
cs |
crowling_cmp_sec.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
import qconfig
import requests
from pandas import DataFrame
if __name__=='__main__':
df = DataFrame(columns=['code', 'name', 'ls', 'ms'])
date = '20200715'
# there is no data in the stock market closed day and before market open.
# weekends, Jan 1, Dec 31 etc
for wics_code in qconfig.wics_mc.keys():
response = requests.get(qconfig.wics_url(date, wics_code))
if(response.status_code == 200): # request success
json_list = response.json() # dictionary
# response.text -> return str type
for json in json_list['list']:
ls = json['SEC_NM_KOR'] # Large sector
ms = json['IDX_NM_KOR'][5:] # Medium sector
code = json['CMP_CD'] # Company code
name = json['CMP_KOR'] # Company korean name
df = df.append({'code':code, 'name':name, 'ls':ls, 'ms':ms},
ignore_index=True)
else:
print('Error:' + response.status_code)
print('WICS code:' + str(wics_code))
|
cs |
json은 requests
모듈 안에 있는 메소드로 사용이 굉장히 간편하다.
- Line 12 :
requests
모듈로 해당 URL을 요청한다. - Line 15 :
json()
메소드를 사용하여 dictionary 타입으로 반환 - Line 17- : 필요한 부분을 취사선택하여 DataFrame에 저장
이와 같이 모든 WICS 섹터에 대해 크롤링이 가능하며 크롤링된 결과를 python console에서 보면 다음과 같다.
In [72] : df.tail(5)
Out[72]:
code name ls ms
2013 003480 한진중공업홀딩스 유틸리티 유틸리티
2014 017390 서울가스 유틸리티 유틸리티
2015 117580 대성에너지 유틸리티 유틸리티
2016 034590 인천도시가스 유틸리티 유틸리티
2017 053050 지에스이 유틸리티 유틸리티
|
cs |
2017개 기업 정보가 크롤링 되었다.
참고
WICS 섹터 정보 확인법
http://blog.naver.com/tmddn3020/221851801072
json 포맷 웹크롤링
'퀀트 > 구현' 카테고리의 다른 글
키움증권 Open API+ 구현 상 issue 해결 | python (0) | 2020.10.24 |
---|---|
키움증권 Open API+ 멀티 로그인 | python pywinauto (2) | 2020.08.23 |
퀀트 주가 분석 및 자동매매 시스템 환경 구축 | python (1) | 2020.07.16 |
장전 시간외 거래에서 프로그램으로 빠르게 매수 주문 넣기 | python (0) | 2020.07.12 |
어닝 서프라이즈 특징주 예후 분석 | python (2) | 2020.07.11 |