본문 바로가기

Programming/Python

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

이번에는 네이버 주식(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


  • 작업반장 2016.07.27 10:33 댓글주소 수정/삭제 댓글쓰기

    강좌 잘 봤습니다.
    코드가 파이썬 3 버전건가요?
    파이썬2 설치했는데 find_all부분에서 에라가 자꾸나서요...

  • 배우미 2016.08.04 22:20 댓글주소 수정/삭제 댓글쓰기

    무슨 책으로 공부하셨는지 알려주실수 있나요?

    • 안녕하세요. 특별한 책을 통해서 지식을 얻은 건 아니고요. 파이썬 매뉴얼에서 습득 했습니다. 책은 특별히 보는 게 없습니다.

  • 배우미 2016.08.04 22:21 댓글주소 수정/삭제 댓글쓰기

    파이썬 공부 시작했는데,
    라이브러리나, 함수 사용법이 사전식으로 나온 책이 있나요?

    • 국내 책을 유심히 보지는 않았지만, 가급적이면 외국 서적을 사서 보시는 게 좋아 보입니다. Python for Finance 책을 좀 보기는 했습니다.

  • pyuser 2016.11.10 01:30 댓글주소 수정/삭제 댓글쓰기

    파이썬으로 3년만기 국고채 금리 데이터를 다운받으려고 하는데 그것도 올려주실 수 있으실런지요???
    dataframe으로 다운받아서 하려고 했더니 그거는 구글하고 야후 finance밖에 지원을 안하는데 3년만기 국고채금리 데이터는 찾을수가 없어서 참고해보려 합니다..

    • 국고채 금리 데이터는 네이버(http://info.finance.naver.com/marketindex/interestDetail.nhn?marketindexCd=IRR_GOVT03Y)에 존재하며, 받아오는 패턴을 동일하니 직접 해보시기 바랍니다.

  • 행복모드 2017.02.06 00:14 댓글주소 수정/삭제 댓글쓰기

    각 종목별 웹크로링 정보를 찾다 방문하게 되었습니다. 좋은 정보 감사드립니다.

  • 절상 2017.02.17 01:31 댓글주소 수정/삭제 댓글쓰기

    안녕하세요. 공부하고 있는 학생입니다.

    법적으로 문제가 되진 않나요..~?

    • 상업적으로 수입을 내지 않고, 학습을 용도로 한다면 법적 문제는 있지 않지만, 너무 많은 자원을 잡게 해서는 안 됩니다.(순간 많은 트래픽을 유발하면 제제가 들어올 수 있습니다.)

      어떤 형태로 사용하려는 지 모르겠지만, 수입 기준으로 데이터를 활용하면 법적 문제가 발생 할 것입니다.

      저는 학습 용도로만 사용했습니다.

  • naturale 2017.05.04 14:20 댓글주소 수정/삭제 댓글쓰기

    좋은 정보 감사합니다!! 스크립트 저작권 관련 한 가지 여쭙고 싶습니다. 올리신 코드를 원저작자 표기하고 수정 및 재배포해도 괜찮을지요?

  • so3124 2017.05.07 01:12 댓글주소 수정/삭제 댓글쓰기

    좋은 정보감사합니다.!! 근데 저기서 csv파일로 저장하는 방법을 output해서 파일명.csv로 하면되나여?? 궁금합니다ㅠㅠ

    • Google URL : https://www.google.co.kr/?gws_rd=ssl#newwindow=1&q=python+write+to+csv+file+example

      다양한 방법이 있습니다. 참고 바랍니다.

  • Thankyou 2017.06.04 14:34 댓글주소 수정/삭제 댓글쓰기

    감사합니다 크롤링에 대해서 공부하던 중 도움이 많이 되었습니다. 그런데 중간에 왜 time.sleep()으로 suspend를 주는지 알려주실 수 있을까요?

    • time.sleep() 특별한 사유가 있는 것은 아니지만, 순간적으로 데이터를 수집하다 보면 성능 부하를 줄 수 있어서 그것을 방지하고자 넣었습니다.

  • 감사합니다 2017.12.15 20:15 댓글주소 수정/삭제 댓글쓰기

    감사합니다! 그런데 중요한 질문이 있습니다. ㅠㅠ
    결과 값인 날짜-주가 데이터를 데이터 프레임 혹은 리스트로 저장하려면 어떻게 해야 하나요..?

  • 좋은정보 감사합니다. 도움이 되는 자료입니다. ^^