-
KIND에서 상장 법인 목록 갈무리(크롤링)하는 법Python/파이썬과 주식 2019. 11. 3. 11:58반응형
* KIND의 정책의 변화에 따라 작동되지 않을 수도 있습니다.
* 실제 투자에 사용하지 마십시오.
한국거래소(KRX)의 기업공시채널인 KIND에 가보면 '상장법인목록'을 조회할 수 있습니다.
http://kind.krx.co.kr/corpgeneral/corpList.do?method=loadInitPage
다음 화면을 볼 수 있죠.
이 화면에서 바로 엑셀 파일을 받아서 사용할 수도 있습니다만...
엑셀파일을 하드에 저장하지 않고, 바로 파이썬에서 처리하도록 해봅시다.
크롬에서 F12를 눌러서 Network 탭을 선택합니다.
이 상태에서 EXCEL 버튼을 누르면, 네트워크 탭에서 corpList.do라는 항목을 볼 수 있습니다.
corpList.do를 클릭하면 리퀘스트 URL과 리퀘스트 시 전송된 Form Data를 확인할 수 있습니다.
view source를 클릭하면 다음 화면도 볼 수 있죠.
약간의 눈썰미가 있다면 HTML과 웹의 구조를 잘 모르더라도
다음 폼의 클릭값들이 Form Data로 변환되어, 웹 서버로 request 된다는 것을 알 수 있을 겁니다.
Request URL과 Form Data를 조합해서 전송하면 웹 서버는 엑셀 파일을 전송해 줍니다.
조합할 때 Request URL과 Form Data사이에는 ?를 꼭 넣어주셔야 합니다.
위 주소를 클릭하면 상장법인목록.xls 라는 파일을 받을 수 있을 겁니다.
전체 목록입니다.
폼데이터를 고쳐서 원하는 시장의 상장법인 목록만을 받을 수도 있겠죠.
marketType에 stockMkt, kosdaqMkt, konexMkt 를 넣어보세요.
자 이제 파일을 받은 뒤 엑셀에서 열어봅니다.
열리긴 열리는 데 뭔가 뻑뻑합니다.
텍스트 에디터로 확인해 보면 HTML 파일인 것을 알 수 있습니다. OTL
하지만 html은 pd.read_html로 읽을 수 있으니 더 편합니다.이렇게 알아낸 정보를 바탕으로 코딩을 합니다.
python 3.7x와 판다스 0.25.1 버전을 사용했습니다.
import pandas as pd # 파일명은 엑셀이지만, 실제 내용은 html이기 때문에 read_html로 읽습니다. stock_df = pd.read_html( 'http://kind.krx.co.kr/corpgeneral/corpList.do?method=download&searchType=13', header=0)[0] """ 엑셀에서 위 파일을 열면 종목코드가 000020 형식으로 정상적으로 보이는데 판다스로 불러오면 정수형 20으로 보입니다. 종목코드를 정수 20으로 쓰는 경우는 거의 없기 때문에 '000020'형식의 문자열로 바꿔야합니다. """ # 종목코드를 빈자리는 0으로 채워진 6자리 문자열로 변환합니다. # temp = [] # for each in stock_df['종목코드']: # temp.append(f'{each:0>6}') # stock_df['종목코드'] = temp stock_df['종목코드'] = stock_df['종목코드'].map(lambda x: f'{x:0>6}') # 결과물을 출력합니다. print(stock_df.head())
반응형