상장법인 일별 데이터를 python으로 가져오기

2021. 8. 18. 19:32IT/예측

728x90
반응형

상장주식의 일별 정보를 가져오려고 합니다. 

 

네이버 금융에서 제공하는 정보를 통해서 정보를 가져오려고 합니다. 

이와 관련한 책도 나와 있습니다. 해당 책을 읽으며 변경된 사항을 반영하여 저도 한번 따라가 보려합니다. 

 

 

목표는 저 일별시세 페이지를 넘겨가면서 일자별 정보(종가, 전일비, 시가, 고가, 저가, 거래량)을 가져오는 것인데 

 

1. 먼저 종목별 데이터의 정보의 양을 파악하기

 

먼저는 카카오의 경우는 몇페이지나 있는지를 파악하는 것입니다.

그래야 얼마나 넘길지를 알아야 하니까요. 

하긴 넘기면서 마지막 페이지가 나오면 그만하는 방식도 있을 것 같네요.

 

우선은 

python 코드는 아래와 같습니다. 

 

크롤링을 위해서 BeautifulSoup을 사용하였습니다.

자신의 시스템의 브라우저 정보를 네이버에 제공해야 하는데 , 그 정보를 쉽게 찾을 수 있도록 해주는 링크입니다. 

http://httpbin.org/user-agent

 

실행하면 아래의 정보가 나옵니다. 아래 정보를 아래 소스에 반영하면 되겠습니다.

 

 

실행한 코드는 아래와 같이 동작합니다. 

 

카카오는 535 페이지가 있다고 정보를 알려주네요.

 


이제는 일별데이터를 가지고 오도록 하겠습니다. 

아래 소스는 특정 종목(035720:카카오) 의 데이터의 페이지수를 확인하고, 그 페이지수만큼 넘겨가며 데이터를 가져오는 소스입니다.  2021년 8월 18일에 동작하는 것을 확인하였습니다.

 

실행결과입니다.

 


* 아래는 소스입니다.

from bs4 import BeautifulSoup
from urllib.request import urlopen
import pandas as pd
import requests

url = "http://finance.naver.com/item/sise_day.nhn?code=035720&page=1"

with urlopen(url) as doc:
    html = BeautifulSoup(requests.get(url, headers={'User-agent': 'Mozilla/5.0'}).text,'lxml')
    pgrr = html.find('td',class_='pgRR')
    s=str(pgrr.a['href']).split('=')
    last_page = s[-1]

print (last_page) #마지막 페이지 인쇄


df = pd.DataFrame()
price_url = 'http://finance.naver.com/item/sise_day.nhn?code=035720'

for page in range(1, int(last_page) + 1):
    page_url = '{}&page={}'.format(price_url,page)
    df = df.append(pd.read_html(requests.get(page_url,headers={'User-agent': 'Mozilla/5.0'}).text)[0])

df=df.dropna()


 

도움이 되셨기를 바라며 그럼 즐거운 시간 되시기 바랍니다.

 

728x90
반응형