웹 스크래핑(웹 크롤링)
웹 스크래핑(웹 크롤링)이란 웹페이지에서 자신이 원하는 데이터를 추출하는 기법을 말한다.
한국거래소 시장 정보, 한국은행 경제통계시스템, 공공 데이터포털 등 증권데이터를 비롯데 다양한 데이터를 엑셀 형태로 수집이 가능하다.
또한 네이버 금융, 다음금융 등 포털 사이트에서 증권 관련 데이터를 직접 웹 스크랩를 통해 정보를 수집할 수 있다.
한국거래소에서 제공하는 상장법인 목록과 네이버 금융 웹 스크래핑을 통해 데이터 분석을 해볼 것이다.
한국거래소 기업공시채널 상장법인목록 가져오기
한국거래소 기업공시채널(https://kind.krx.co.kr/main)의 '상장법인상세정보' → '상장법인목록' 이동
엑셀 파일을 다운로드 한다.
상장법인목록 EXCEL 파일인 '상장법인목록.xls'를 확인한다.
'상장법인목록.xls'의 확장자가 .xls 이지만, 실제 내용은 HTML이므로 Pandas의 read_excel()로 읽을 수 없다.
.xls 파일은 pandas의 read_html()함수를 이용하여 파일을 읽을 수 있다.
.xls 파일을 read_excel()함수로 읽고 싶다면 '상장법인목록.xls' 파일명을 '상장법인목록.xlsx' 확장자로 변경한 뒤 read_excel()함수를 이용하여 읽을 수 있다.
'상장법인목록.xls' 파일 읽어오기
import pandas as pd
# 한국거래소 상장법인목록 가져오기
krx_list = pd.read_html('C:\\Users\\kwonk\\Downloads\\개인 프로젝트\\juno1412-1\\증권데이터분석\\data_files\\상장법인목록.xls')
krx_list[0]
krx_list라는 변수에 상장법인목록.xls 파일을 확인할 수 있다
종목코드는 6자리 수로 표현되어야 하지만, 종목코드에서 0이 빠져있음을 확인할 수 있다.
map() 함수를 이용하여 6자리 수의 종목코드로 종목코드 데이터 전처리해준다.
import pandas as pd
# 한국거래소 상장법인목록 가져오기
krx_list = pd.read_html('C:\\Users\\kwonk\\Downloads\\개인 프로젝트\\juno1412-1\\증권데이터분석\\data_files\\상장법인목록.xls')
# 종목코드 전처리
krx_list[0].종목코드 = krx_list[0].종목코드.map('{:06d}'.format)
krx_list[0]
6자리 종목코드에서 0을 포함한 종목코드로 변경하는 전처리 과정을 수행하였다.
URL을 이용해 인터넷 상에서 바로 파일 읽어오기
# 한국거래소 상장법인 목록 URL로 가져오기
import pandas as pd
# 한국거래소 상장법인목록 가져오기
krx_list = pd.read_html('https://kind.krx.co.kr/corpgeneral/corpList.do?method=download&searchType=13')[0]
# 종목코드 전처리
krx_list.종목코드 = krx_list.종목코드.map('{:06d}'.format)
krx_list = krx_list.sort_values(by='종목코드')
krx_list
HTML 익히기
웹페이지는 JSP, ASP, PHP 등 다양한 언어로 작성할 수 있으나
웹브라우저에서는 최종적으로 HTML로 변환된 결과를 랜더링해서 표시하기 때문에
웹 스크래핑(웹크롤링)하려면 HTML을 기본적으로 알아야 한다.
HTML 기본 구조
HTML = HyperText Markup Language의 약자
- HyperText : 다른 문서를 연결하는 텍스트로 뉴스 제목을 클릭했을 때 본문페이지로 이동하는데, 뉴스 제목에 해당하는 부문이 HyperText이다.
- Markup : HTML에서 텍스트가 화면에서 어떻게 보여야하는지 정의하는 기법을 말한다.
예를 들어, <b>This is bold text.</b>라고 쓰면 텍스트가 bold체로 표시된다.
여기서 <b>는 여는 태그, </b>는 닫는 태그라고 한다.
<br>태그처럼 텍스트를 둘러싸지 않고 사용되는 태그도 있으나, 태그는 여는 태그 사용해도 괜찮지만,
브라우저 호환성을 고려하여 <br />을 사용해주는 것이 좋다.
HTML 주요 태그 리스트
태그 | 속성 | 의미 |
html | HTML 문서 | |
head | 문서 헤더 | |
title | 문서 제목 | |
body | text, background, bgcolor | 문서 바디 |
h1, h2, h3 | 머리말(heading) | |
p | 문단(paragraph) | |
br | 줄바꿈(line break) | |
b | 볼드체 | |
i | 이텔릭체 | |
s | 취소선(strike) | |
ol, ul | type | 순서 리스트, 비순서 리스트 |
li | type | 리스트 아이템 |
table | width, border, cellpadding | 테이블 |
tr | align | 테이블 행 |
th, td | colspan | 테이블 헤더, 테이블 데이터 |
a | href, target | 하이퍼링크 |
img | src, width, height | 이미지 |
<!--...--> | 주석 |
HTML 예시
<html>
<head>
<title>This is title.</title>
</head>
<body>
<h1>This is heading1 text.</h1>
<h2>This is heading2 text.</h2>
<h3>This is heading3 text.</h3>
<p>This is a paragraph.</p>
This is plain text.<br />
<b>This is bold text.</b><br />
<i>This is Italic text.</i><br />
<s>This is strike text.</s><br />
<ol>
<li>the first orderd list</li>
<li>the second orderd list</li>
<li>the third orderd list</li>
</ol>
<ul>
<li>unorderd list</li>
<li>unorderd list</li>
<li>unorderd list</li>
</ul>
<table border=1>
<tr>
<th>table header 1</th>
<th>table header 2</th>
<th>table header 3</th>
</tr>
<tr>
<td>table data 4</td>
<td>table data 5</td>
<td>table data 6</td>
</tr>
<tr>
<td>table data 7</td>
<td>table data 8</td>
<td>table data 9</td>
</tr>
</table><br />
<a href="https://www.python.org">Visit Python homepage!<br />
<img src="https://www.python.org/static/img/python-logo.png" /></a>
</body>
</html>
참고도서
http://www.yes24.com/Product/Goods/90578506
https://github.com/INVESTAR/StockAnalysisInPython
'python > 금융데이터분석' 카테고리의 다른 글
python 증권데이터 분석 - OHLC와 캔들차트 그리기 (1) | 2022.12.24 |
---|---|
python 증권데이터 분석 - 네이버 금융 웹 스크래핑(웹 크롤링) (0) | 2022.12.24 |
python 증권데이터 분석 - 회귀 분석과 상관관계, KOSPI 다우존스 회귀분석 (0) | 2022.12.23 |
python 증권데이터 분석 - 최대손실낙폭 MDD(KOSPI MDD구하기) (0) | 2022.12.23 |
python 증권데이터 분석 - 삼성 vs 애플 주식, 주가, 일간변동률 비교하기 (0) | 2022.12.23 |
댓글