기업공시채널 KIND에서 상장법인목록을 스크래핑 한다.
"상장법인목록" 메뉴를 보면 검색조건에 "유가증권", "코스닥" 라디오 버튼이 위치하고 오른쪽 하단에 "EXCEL"버튼을 확인 할 수있다. 엑셀 버튼 클릭 시 시장구분 조건을 달리 하여 조회하면 POST 폼 데이터가 바뀌는 것을 확인 할 수있다. (크롬 개발자 도구의 Network 탭 에서 확인 )
폼 데이터의 "marketType" 파라미터 이름으로 코스피(유가증권)는 "stockMkt", 코스닥은 "kosdaqMkt"로 구분된다. 수동으로 엑셀버튼을 다운로드 하여 노트패드 등에서 열어보면 엑셀이 아닌 HTML로 구성된 것을 확인 할 수있다.
Pandas는 많은 임포트 기능을 지원하는데 온라인에 html을 읽어 바로 Dataframe형태로 변환 할 수있다.
주의 할 것은 html내에 여러 테이블이 존재 할 수 있으므로 list 형태로 리턴된다.
Pandas 설치 ( Python 3.9 사용 )
pip install pandas
코스피, 코스닥 상장법인 종목코드 스크래핑
import pandas as pd
url = 'https://kind.krx.co.kr/corpgeneral/corpList.do' # 1
kosdaq = pd.read_html(url+"?method=download&marketType=kosdaqMkt")[0] #2
kospi = pd.read_html(url+"?method=download&marketType=stockMkt")[0] #3
#1. 다운로드 페이지 ur
#2. 코스닥 POST Data 조립 후 read_html 함수로 데이터 조회
#3. 코스피 POST Data 조립 후 read_html 함수로 데이터 조회
상장법인 종목 수 확인
print(f'kosdaq length: {len(kosdaq)}, kospi length {len(kospi)}')
# OUTPUT
kosdaq length: 2313, kospi length 1404
종목코드 데이터 형 변환
종목코드 데이터를 살펴보게되면 int로 인식되어 있다. ( Pandas에서 자동으로 인식 ) 6자리로 채워진 종목코드로 변환하기 위해 아래와 같이 문자열로 형 변환 후 zfill
로 0을 채워준다.
kosdaq.종목코드 = kosdaq.종목코드.astype(str).apply(lambda x:x.zfill(6))
kospi.종목코드 = kospi.종목코드.astype(str).apply(lambda x:x.zfill(6))
시장구분 추가
이제 시장구분에 따른 구분을 Dataframe에 추가해보자. ( 야후금융에서는 코스피를 "KS", 코스닥을 "KQ"로 관리한다. )
kosdaq['type'] = 'KQ'
kospi['type'] = 'KS'
stocks = kospi.append(kosdaq) # kospi 뒤로 kosdaq dataframe을 합친다.
len(stocks)
# OUTPUT
3717
블로그 작성일 기준 토탈 상장법인 3717개가 확인된다.
최근 상장일 내림차순 조회
stocks.sort_values(by="상장일", ascending=False)
# OUTPUT
회사명 종목코드 업종 주요제품 상장일 결산월 대표자명 홈페이지 지역 type
1991 피엔에이치테크 239890 기초 화학물질 제조업 OLED 소재 2021-02-16 12월 현서용 http://www.phtech.co.kr 경기도 KQ
571 하나금융17호스팩 363260 금융 지원 서비스업 기업인수합병 2021-02-10 12월 남강욱 NaN 서울특별시 KQ
883 피비파마 950210 자연과학 및 공학 연구개발업 바이오시밀러 및 항체의약품 신약 2021-02-05 06월 박소연 http://www.prestigebiopharma.com 싱가포르 KS
479 아이퀘스트 262840 소프트웨어 개발 및 공급업 패키지 ERP, 구축형 ERP 등 2021-02-05 12월 김순모 http://www.iquest.co.kr 서울특별시 KQ
1039 신한제7호스팩 366330 금융 지원 서비스업 SPAC 2021-02-04 12월 김병훈 NaN 서울특별시 KQ
... ... ... ... ... ... ... ... ... ... ...
73 한국운수 028750 NaN NaN 1956-03-03 12월 NaN NaN NaN KS
708 한진중공업홀딩스 003480 연료용 가스 제조 및 배관공급업 지주회사 1956-03-03 12월 조남호, 조원국 http://www.hhic-holdings.com 경기도 KS
959 한일은행 000130 NaN NaN 1956-03-03 12월 NaN NaN 서울특별시 KS
1366 유수홀딩스 000700 회사 본부 및 경영 컨설팅 서비스업 지주사업 1956-03-03 12월 송영규 http://www.eusu-holdings.com 서울특별시 KS
36 신한은행 000010 보험업 은행업(은행업무,외국환업무,신탁업무) 1956-03-03 12월 진옥동 http://www.shinhan.com 서울특별시 KS
컬럼명을 영어로 바꾼다.
stocks = stocks.rename(columns={'회사명':'comp_name', '종목코드':'code', '업종':'tob', '주요제품':'main_products', '상장일':'listing_date', '결산월':'sett_month', '대표자명':'ceo_name', '홈페이지':'homepage', '지역':'region'})
다음 편에선 위에서 얻은 DataFrame 구조의 모델을 만들고 Database를 구축해보도록 한다.
2021/02/20 - [python/주식] - Python - 상장법인 종목코드 데이터베이스 구축 ( MariaDB - 커넥션, 저장, 조회 )
사용 DBMS는 MariaDB를 사용한다. MariaDB 사용 설치는 Django 게시판 만들기에서 다루었던 다음 블로그를 참조한다.
2021/02/01 - [python/Django] - 2. 게시판 만들기 - Django + mariaDB 연동( 접속부터 모델생성까지 - migration )
'python > 주식' 카테고리의 다른 글
Python - 상장법인 종목코드 데이터베이스 구축 ( MariaDB - 커넥션, 저장, 조회 ) (0) | 2021.02.20 |
---|---|
Backtrader - ImportError: cannot import name 'warnings' from 'matplotlib.dates' 오류 처리 방법 (0) | 2021.02.17 |
1. Python 주식 일간 변동률 계산 - ( 삼성전자 vs 애플 시각화 비교 ) (2) | 2021.02.16 |
3. Python - Plotly 캔들차트 + 이동평균선 ( feat. rolling API 사용법 ) (4) | 2021.01.27 |
2. Python - Plotly 캔들 + 거래량 차트 만들기 ( 복수 차트 생성 ) (1) | 2021.01.26 |