본문 바로가기
python/주식

Python - 상장법인 종목코드 초간단 스크래핑(코스피, 코스닥 구분)

by 맑은안개 2021. 2. 19.

기업공시채널 KIND에서 상장법인목록을 스크래핑 한다. 

 

"상장법인목록" 메뉴를 보면 검색조건에 "유가증권", "코스닥" 라디오 버튼이 위치하고 오른쪽 하단에 "EXCEL"버튼을 확인 할 수있다. 엑셀 버튼 클릭 시 시장구분 조건을 달리 하여 조회하면 POST 폼 데이터가 바뀌는 것을 확인 할 수있다. (크롬 개발자 도구의 Network 탭 에서 확인 )

 

기업공시채널 KIND

폼 데이터의 "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 - 커넥션, 저장, 조회 )

 

Python - 상장법인 종목코드 데이터베이스 구축 ( MariaDB - 커넥션, 저장, 조회 )

전 편에서 스크래핑으로 얻은 종목데이터를 데이터베이스로 구축해본다. 종목코드 데이터 stocks # OUTPUT comp_name code tob main_products listing_date sett_month ceo_name homepage region type 0 JS전선 00..

youngwonhan-family.tistory.com

 

사용 DBMS는 MariaDB를 사용한다. MariaDB 사용 설치는 Django 게시판 만들기에서 다루었던 다음 블로그를 참조한다.

2021/02/01 - [python/Django] - 2. 게시판 만들기 - Django + mariaDB 연동( 접속부터 모델생성까지 - migration )

 

2. 게시판 만들기 - Django + mariaDB 연동( 접속부터 모델생성까지 - migration )

전 편(1. 게시판 만들기 - Django 3.x 설치 및 핵심개념 파악) 에서 Django 설치와 index페이지를 구성해보았다. 전 편에 이어서 데이터베이스 mariaDB를 Django와 연동하고 마이그레이션 기능을 사용해서

youngwonhan-family.tistory.com

 

반응형