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

 

이전 포스팅에서 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 86684
공지 [SQL컨셉] 서적 "SQL컨셉"의 샘플 데이타 베이스 SAMPLE DATABASE of ORACLE 가을의 곰을... 2013.02.10 79034
공지 [G_SQL] Sample Database 가을의 곰을... 2012.05.20 95798
122 [MySQL] VScode extension 으로 MySQL DB 연결하기 file 졸리운_곰 2025.08.21 1166
121 [MySQL] Workbench로 ERD 그리기 file 졸리운_곰 2024.10.29 1914
120 [NoSQL 데이터모델] MongoDB - 데이터 모델 졸리운_곰 2024.08.10 1467
119 [MySQL] 고성능 스토리지 기반의 DB통합 : MySQL 컨솔리데이션(Consolidation) file 졸리운_곰 2024.08.10 1133
118 [MariaDB] Installing the CONNECT Storage Engine 졸리운_곰 2024.08.07 1623
117 [MariaDB] Mariadb Connect Engine , MariaDB 이기종 타 데이터베이스 링크 시스템 file 졸리운_곰 2024.08.07 1204
116 [MySQL] [Mysql] Public key retrieval is not allowed 에러 해결 file 졸리운_곰 2024.07.27 1162
115 [MySQL] dbeaver(DB 관리툴)를 이용한 mysql, mariadb table 복사하기 file 졸리운_곰 2024.07.08 1475
114 [MySQL] [DBeaver] MySQL 연결 시 "Public Key Retrieval is not allowed" 해결하기 file 졸리운_곰 2024.07.08 1323
113 [MYSQL] trigger로 jsp페이지 호출하기 졸리운_곰 2024.06.01 1403
112 [MYSQL] MySQL 기간에 따른 데이터 가져오기 (ex 3 개월 전, 일주일 전, 하루 전) 졸리운_곰 2024.04.18 1427
111 [MYSQL] MYSQL JSON 관련 함수 file 졸리운_곰 2024.02.18 1362
110 [MySQL workbench] [MySQLWorkbench] 테이블 복사하기 file 졸리운_곰 2023.08.14 1089
109 [MySQL Workbench] [MYSQL] WORKBENCH로 트리거 설정하기 file 졸리운_곰 2023.08.14 968
108 [MySQL] 트리거 (종류, 사용법, 삭제, 예제) 졸리운_곰 2023.07.19 1211
107 [MySQL] 트리거(Trigger)의 활용 file 졸리운_곰 2023.07.19 1496
106 [MySQL] 트리거(Trigger)란? 트리거 사용 예제 file 졸리운_곰 2023.07.19 1345
105 [MySQL] MySQL - 테이블 만들기 file 졸리운_곰 2023.05.13 1244
104 [MySQL] MySQL Strict mode 끄기/켜기 졸리운_곰 2023.05.05 1442
103 [MySQL] [MySQL] 테이블 구조와 데이터 복사 (Table Structure and Data Copy) 졸리운_곰 2023.03.20 1366
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED