[데이터 수집 및 전처리] 네이버 증권에서 일봉, 주봉 데이터 가져오기

 

이전 포스팅에서 pandas_datareader 를 이용하여 일봉 데이터를 조회하는 방법을 알아보았다.
이번에는 naver 의 url 을 이용하여 일봉과 주봉 데이터를 가져와서 parsing 하는 방법을 알아보려고 한다.

xml 데이터를 조회하여 BeautifulSoup 으로 파싱하는 방법과 list 형식의 데이터를 조회하여 ast 라이브러리의 literal_eval 함수를 이용하여 바로 list 로 parsing 하는 방법이 있다.


1. xml 데이터 조회

건수 기준은 최근데이터만 조회해서 볼때 사용하면 편하고, 날짜 기준 조회는 과거 데이터를 조회할때 유용할 것 같다.

1) 조회 건수를 기준으로 조회

https://fchart.stock.naver.com/sise.nhn?symbol=035720&timeframe=day&requestType=0&count=10

symbol : 종목코드
requestType : 0 (조회 건수를 기준으로 조회)
count : 조회할 데이터 건수
timeframe : day (일봉 데이터), week (주봉 데이터)

2) 날짜를 기준으로 조회

https://fchart.stock.naver.com/sise.nhn?symbol=035720&timeframe=day&requestType=1&startTime=20220126&endTime=20220211

symbol : 종목코드
requestType : 1 (날짜를 기준으로 조회)
startTime : 시작 일자
endTime : 마지막 일자
timeframe : day (일봉 데이터), week (주봉 데이터)

3) 조회 결과

URL 호출 시 이렇게 xml 데이터가 조회된다. item 항목의 data 속성에 | 를 구분으로 해서 데이터가 들어가 있다.
데이터 순서는 날짜|시가|고가|저가|종가|거래량 이다.

 

 

4) python 코드

import requests
import pandas
from pandas import to_numeric
from bs4 import BeautifulSoup

code = "035720"

response = requests.get(f"https://fchart.stock.naver.com/sise.nhn?symbol={code}&requestType=0&count=10&timeframe=day")
bs = BeautifulSoup(response.text, "html.parser")
items = bs.find_all('item')
price_data = []
for item in items:
    data = item['data'].split('|')
    price_data.append(data)

price_data = pandas.DataFrame(price_data, columns=["날짜", "시가", "고가", "저가", "종가", "거래량"])
price_data.index = price_data["날짜"]
price_data = price_data[["시가", "고가", "저가", "종가", "거래량"]]
price_data = price_data.apply(to_numeric)

 

BeautifulSoup 을 이용하여 html 파싱 후 item 태그의 data 속성의 값을 읽어서 parsing 하였다.

 

결과

             시가     고가     저가     종가      거래량
날짜                                           
20220126  87300  88600  86600  86900  2204197
20220127  87000  87500  82600  82600  3793749
20220128  82800  85600  82200  85000  2958280
20220203  87100  88300  85100  85100  3118696
20220204  85100  87500  84500  87100  1870626
20220207  87300  88000  85000  88000  2224116
20220208  88000  89200  86000  86500  2030457
20220209  86900  87300  85700  86100  1640629
20220210  86900  89400  86000  87300  3401352
20220211  87300  93600  85300  91700  6972817


2. list 데이터 조회

1) 조회 건수를 기준으로 조회

https://api.finance.naver.com/siseJson.naver?symbol=005930&timeframe=day&requestType=0&count=10

symbol : 종목코드
requestType : 0 (조회 건수를 기준으로 조회)
count : 조회할 데이터 건수
timeframe : day (일봉 데이터), week (주봉 데이터)

2) 날짜를 기준으로 조회

https://api.finance.naver.com/siseJson.naver?symbol=005930&timeframe=day&requestType=1&startTime=20220126&endTime=20220211

symbol : 종목코드
requestType : 1 (날짜를 기준으로 조회)
startTime : 시작 일자
endTime : 마지막 일자
timeframe : day (일봉 데이터), week (주봉 데이터)

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

3) 조회 결과

 

 

4) python 코드

import requests
import pandas
from ast import literal_eval

code = "035720"

response = requests.get(f"https://api.finance.naver.com/siseJson.naver?symbol={code}&requestType=0&count=10&timeframe=day")
response_data = literal_eval(response.text.strip())
price_data = pandas.DataFrame(response_data[1:], columns=response_data[0])
price_data.index = price_data["날짜"]
price_data = price_data[["시가", "고가", "저가", "종가", "거래량"]]

 

literal_eval 을 이용하여 string 으로 표현된 list 를 실제 list 데이터로 변환해줄 수 있다.
그리고 이렇게 변환하는 경우에는 가격 정보가 numeric 으로 자동으로 변환되어 코드가 간결해진다.

 

결과

             시가     고가     저가     종가      거래량
날짜                                           
20220126  87300  88600  86600  86900  2204197
20220127  87000  87500  82600  82600  3793749
20220128  82800  85600  82200  85000  2958280
20220203  87100  88300  85100  85100  3118696
20220204  85100  87500  84500  87100  1870626
20220207  87300  88000  85000  88000  2224116
20220208  88000  89200  86000  86500  2030457
20220209  86900  87300  85700  86100  1640629
20220210  86900  89400  86000  87300  3401352
20220211  87300  93600  85300  91700  6972817


위 방법으로 데이터를 조회하여 이용하는 것은 개인의 주식 투자에만 사용되어야 한다. 해당 정보를 재가공하여 웹으로 제공한다던지 다른 목적으로 이용하여서는 안된다. 그리고 공식적으로 제공되는 API 가 아니라 naver 웹페이지에서 사용하는 API 이기 때문에 화면 수정이나 기타 이유에 따라 언제든지 API 가 사라지거나 변경될 수 있다. 또한 과도한 트래픽을 발생시킬 경우 차단될지도 모르니 주의해서 사용해야한다.

출처: https://dkgkim.tistory.com/21 [X-Box:티스토리]

 

 

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED