DATA 전문가로 가는 길

[Python] 네이버 주식 종목별 일별 데이터 가져오기 본문

Programming/Python

[Python] 네이버 주식 종목별 일별 데이터 가져오기

EstenPark 2016. 5. 3. 09:17

이번에는 네이버 주식(http://finance.naver.com/) 데이터를 가져오는 방법을 해보도록 하겠습니다. 

아래는 삼성전자(보통주)를 기준으로 일별시세 데이터 입니다.


크롬에서 표 안쪽에서 오른쪽 마우스를 누르면 "프레임 소스 보기" 선택하면 아래 표에 해당하는 주소를 얻어 올 수 있습니다.


삼성전자(보통주) 일별 시세 주소 : finance.naver.com/item/sise_day.nhn?code=005930



 

그 다음에 주요한 것은 각 페이지별로 데이터를 가져오는 방법입니다. 

2번 페이지를 누를 경우 아래와 같은 주소를 얻게 됩니다.


삼성전자(보통주) 일별 시세 페이지 주소 : finance.naver.com/item/sise_day.nhn?code=005930&page=2




이러한 방법으로 데이터를 수집해보겠습니다.



1. 네이버 주식 일별시세(삼성전자) 데이터 가져오기

import urllib
import time

from urllib.request import urlopen
from bs4 import BeautifulSoup
 
stockItem = '005930' 

url = 'http://finance.naver.com/item/sise_day.nhn?code='+ stockItem
html = urlopen(url)  
source = BeautifulSoup(html.read(), "html.parser")

maxPage=source.find_all("table",align="center")
mp = maxPage[0].find_all("td",class_="pgRR")
mpNum = int(mp[0].a.get('href')[-3:])
                                           
for page in range(1, mpNum+1):
  print (str(page) )
  url = 'http://finance.naver.com/item/sise_day.nhn?code=' + stockItem +'&page='+ str(page)
  html = urlopen(url)
  source = BeautifulSoup(html.read(), "html.parser")
  srlists=source.find_all("tr") 
  isCheckNone = None
  
  if((page % 1) == 0):
    time.sleep(1.50)

  for i in range(1,len(srlists)-1): 
   if(srlists[i].span != isCheckNone):
   	
    srlists[i].td.text
    print(srlists[i].find_all("td",align="center")[0].text, srlists[i].find_all("td",class_="num")[0].text )
   


2. 네이버 주식 일별시세(삼성전자) 데이터 결과

[python@localhost source]$ python get_naver_stock_prices.py
1
2016.05.03 1,258,000
2016.05.02 1,250,000
2016.04.29 1,245,000
2016.04.28 1,265,000
2016.04.27 1,300,000
2016.04.26 1,296,000
2016.04.25 1,281,000
2016.04.22 1,280,000
2016.04.21 1,294,000
2016.04.20 1,299,000
2
2016.04.19 1,288,000
2016.04.18 1,299,000
2016.04.15 1,300,000
2016.04.14 1,300,000
2016.04.12 1,275,000
2016.04.11 1,266,000
2016.04.08 1,246,000
2016.04.07 1,269,000
2016.04.06 1,285,000
2016.04.05 1,260,000


Comments