-
KT AIVLE School DX트랙 4주차-웹크롤링KT_Aivle_School/Python 2024. 3. 24. 21:54
웹크롤링 기초와 네이버 증권 데이터 수집하기
웹크롤링은 웹페이지에서 데이터를 추출하는 과정을 말합니다. 이 과정은 크게 정적인 페이지와 동적인 페이지로 나눌 수 있으며, 각각 다른 방법으로 데이터를 수집합니다.
웹페이지의 종류
- 정적인 페이지: 웹 브라우저에 화면이 한 번 뜨면 이벤트에 의한 화면의 변경이 없는 페이지입니다.
- 동적인 페이지: 웹 브라우저에 화면이 뜨고 이벤트가 발생하면 서버에서 데이터를 가져와 화면을 변경하는 페이지입니다.
데이터 수집 방법
- requests 이용
- json 문자열로 받아서 파싱하는 방법: 주로 동적 페이지 크롤링할 때 사용합니다.
- html 문자열로 받아서 파싱하는 방법: 주로 정적 페이지 크롤링할 때 사용합니다.
- selenium 이용
- 브라우저를 직접 열어서 데이터를 받는 방법: 동적인 페이지에서 자바스크립트로 생성되는 데이터를 수집할 때 유용합니다.
크롤링 방법에 따른 속도
- requests json > requests html > selenium
Crwaling Naver Stock Data
네이버 증권 사이트에서 주가 데이터를 수집하는 과정을 살펴보겠습니다. 수집할 데이터는 일별 KOSPI, KOSDAQ 주가, 일별 환율(exchange rate) 데이터입니다.
데이터 수집 절차
- 웹서비스 분석: URL을 분석합니다.
- 서버에 데이터 요청:
request(url)
후response
를 json 형태로 받습니다. - 서버에서 받은 데이터 파싱: json 형태의 데이터를 list, dict로 변환 후 DataFrame으로 만듭니다.
import warnings warnings.filterwarnings('ignore') import pandas as pd import requests # 1웹서비스 분석 page, page_size = 1, 60 url = f'https://m.stock.naver.com/api/index/KOSPI/price?pageSize={page_size}&page={page}' print(url) # 2서버에 데이터 요청 response = requests.get(url) # response의 status code 확인 # 3서버에서 받은 데이터 파싱 columns = ["localTradedAt", "closePrice"] data = response.json() kospi_df = pd.DataFrame(data)[columns] kospi_df.tail(2)
함수 만들기
def stock_price(code="KOSPI", page=1, page_size=60): url = f'https://m.stock.naver.com/api/index/{code}/price?pageSize={page_size}&page={page}' response = requests.get(url) columns = ["localTradedAt", "closePrice"] data = response.json() return pd.DataFrame(data)[columns]
시각화
%matplotlib inline import matplotlib.pyplot as plt import seaborn as sns # 데이터 수집 kospi_df = stock_price("KOSPI", page_size=page_size) # 시각화 plt.figure(figsize=(20, 5)) plt.plot(kospi_df["localTradedAt"], kospi_df["closePrice"]) plt.show()
데이터 스케일링과 상관관계 분석
데이터 스케일링과 상관관계 분석을 통해 데이터 간의 관계를 더 명확하게 이해할 수 있습니다.
from sklearn.preprocessing import minmax_scale # 데이터 스케일링 plt.figure(figsize=(20, 5)) plt.plot(kospi_df["localTradedAt"], minmax_scale(kospi_df["closePrice"])) plt.show()
# 상관관계 분석 corr_df = kospi_df.corr() sns.heatmap(corr_df, cmap="YlGnBu", annot=True) plt.show()
'KT_Aivle_School > Python' 카테고리의 다른 글
KT AIVLE School DX트랙 5주차-머신러닝 (1) 2024.04.19 KT AIVLE School DX트랙 5주차-데이터 분석표현 (1) 2024.04.19 KT AIVLE School DX트랙 3주차-시계열 데이터 (1) 2024.03.24 KT AIVLE School DX트랙 3주차-이변량 분석 2 (0) 2024.03.24 KT AIVLE School DX트랙 3주차-이변량 분석 (1) 2024.03.24