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

 

이전 포스팅에서 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:티스토리]

 

 

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
공지 오라클 기본 샘플 데이터베이스 졸리운_곰 2014.01.02 86736
공지 [SQL컨셉] 서적 "SQL컨셉"의 샘플 데이타 베이스 SAMPLE DATABASE of ORACLE 가을의 곰을... 2013.02.10 79062
공지 [G_SQL] Sample Database 가을의 곰을... 2012.05.20 95823
15 [표준SQL] 퀴즈로 배우는 SQL : 전기 요금 계산 file 졸리운_곰 2024.08.10 1582
14 [표준SQL] 퀴즈로 배우는 SQL : 파이프 연결하기 file 졸리운_곰 2024.08.10 1321
13 [표준SQL] 퀴즈로 배우는 SQL : 공통점이 가장 많은 친구 찾기 file 졸리운_곰 2024.08.10 2123
12 [표준 SQL] 퀴즈로 배우는 SQL : 일별 누적 접속자 통계 구하기 file 졸리운_곰 2024.08.10 1692
11 [표준 SQL] 퀴즈로 배우는 SQL : 구분자로 나누어 행,열 바꾸기 file 졸리운_곰 2024.08.10 1887
10 [표준 SQL] 퀴즈로 배우는 SQL : 신입사원 부서 배치에 따른 급여 랭킹 시뮬레이션 file 졸리운_곰 2024.08.10 1340
9 [표준 SQL] 퀴즈로 배우는 SQL : 시작일, 종료일 사이의 휴일을 제외한 일수 구하기 file 졸리운_곰 2024.08.10 1486
8 [표준 SQL] 권순용의 DB 이야기 : 함수 기반 인덱스의 개념과 생성 이해 file 졸리운_곰 2024.08.10 1377
7 [표준 SQL] 퀴즈로 배우는 SQL : 계층 쿼리를 이용해 조직도 만들기 file 졸리운_곰 2024.08.10 2076
6 [표준 SQL] SQL을 잘한다는 기준은 무엇일까 file 졸리운_곰 2024.08.10 1341
5 [SQL] CRUD 기본 사용법 file 졸리운_곰 2023.01.23 1394
4 [기본 SQL] SELECT, INSERT, UPDATE, DELETE file 졸리운_곰 2022.04.26 1209
3 Mysql Join 해부(Left, Right, Outer, Inner Join) file 졸리운_곰 2019.01.30 1578
2 Join의 모든것.(LEFT OUTER, RIGHT OUTER, INNER, FULL OUTER, CROSS) 졸리운_곰 2019.01.30 1520
1 SELECT 문법 file 졸리운_곰 2017.11.22 2317
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED