금융 데이터, 주식 관련 데이터 분석, 네이버 금융 개별종목 수집
Data Analyst

빅데이터 관련 자료/Python

금융 데이터, 주식 관련 데이터 분석, 네이버 금융 개별종목 수집

carpe08 2022. 2. 21. 10:41
320x100
320x100

라이브러리 로드

import pandas as pd

 

수집할 URL 정하기

# 종목번호와 상장사 이름을 item_code와 item_name으로 설정
item_code = "352820"
item_name = "빅히트"

# item_code = "326030"
# item_name = "SK바이오팜"

# 종목 URL 만들기
url="https://finance.naver.com/item/sise_day.nhn?code=352820&page=3"
print(url)

 

requests를 통한 HTTP 요청

import requests

response=requests.get(url)
response.text

 

headers={"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36"}

response=requests.get(url,headers=headers)

response.text

 

BeautifulSoup 을 통한 table 태그 찾기

from bs4 import BeautifulSoup as bs

html=bs(response.text,"lxml")
html

 

 

temp=html.select("table")
temp

 

 

str(temp)

 

pandas 코드 한 줄로 데이터 수집하기

# read_html을 이용하여 url의 page내의 값을 DataFrame으로 받아옵니다.
# cp949는 한글 인코딩을 위해 사용합니다. 기본 인코딩 설정은 utf-8 이며, 
# 네이버의 일별 시세는 cp949 인코딩으로 불러올 수 있습니다.
# 데이터를 로드 했을 때 한글 인코딩이 깨진다면 대부분 cp949 로 불러올 수 있습니다.
table=pd.read_html(str(temp))
table

 

 

# table[0]와 table[1]을 확인하여 보면 table[0]에 필요한 데이터들이 있습니다.
table[0]

 

 

# dropna를 통해 결측치가 들어있는 row를 제거합니다.
temp=table[0].dropna()
temp

 

페이지별 데이터 수집 함수 만들기

def get_day_list(item_code,page_no):
    url=f"https://finance.naver.com/item/sise_day.nhn?code={item_code}&page={page_no}"
    headers={"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36"}
    response=requests.get(url,headers=headers)
    html=bs(response.text,"lxml")
    temp=html.select("table")
    table=pd.read_html(str(temp))
    table=table[0].dropna()
    return table
# 함수가 잘 만들어졌는지 확인
get_day_list("352820",2)

반복문을 통한 전체 일자 데이터 수집하기

  • (주의) 기간이 긴 데이터를 수집할때는 서버에 부담을 주지 않기 위해 time.sleep()값을 주세요.
    len(item_list)

 

 

수집한 데이터 하나의 데이터프레임으로 합치기

item_list[0]

 

df.head()

 

320x100
320x100