- 전체
- Sample DB
- database modeling
- [표준 SQL] Standard SQL
- G-SQL
- 10-Min
- ORACLE
- MS SQLserver
- MySQL
- SQLite
- postgreSQL
- 데이터아키텍처전문가 - 국가공인자격
- 데이터 분석 전문가 [ADP]
- [국가공인] SQL 개발자/전문가
- NoSQL
- hadoop
- hadoop eco system
- big data (빅데이터)
- stat(통계) R 언어
- XML DB & XQuery
- spark
- DataBase Tool
- 데이터분석 & 데이터사이언스
- Engineer Quality Management
- [기계학습] machine learning
- 데이터 수집 및 전처리
- 국가기술자격 빅데이터분석기사
- 암호화폐 (비트코인, cryptocurrency, bitcoin)
데이터 수집 및 전처리 [데이터 수집 및 전처리] 네이버 증권에서 일봉, 주봉 데이터 가져오기
2023.12.08 20:07
[데이터 수집 및 전처리] 네이버 증권에서 일봉, 주봉 데이터 가져오기
이전 포스팅에서 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 (주봉 데이터)
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:티스토리]
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
댓글 0
| 번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
|---|---|---|---|---|
| 공지 | 오라클 기본 샘플 데이터베이스 | 졸리운_곰 | 2014.01.02 | 86108 |
| 공지 | [SQL컨셉] 서적 "SQL컨셉"의 샘플 데이타 베이스 SAMPLE DATABASE of ORACLE | 가을의 곰을... | 2013.02.10 | 78621 |
| 공지 | [G_SQL] Sample Database | 가을의 곰을... | 2012.05.20 | 95335 |
| 13 |
[데이터 수집 및 전처리] 주식 전종목 어떻게 불러올까? 거래소 종목 불러오기
| 졸리운_곰 | 2023.12.09 | 1701 |
| 12 |
[데이터 수집 및 전처리] [Python/파이썬]네이버증권API 활용 - 회사명, 종목코드 받아오기
| 졸리운_곰 | 2023.12.08 | 1509 |
| 11 |
[데이터 수집 및 전처리] 네이버 금융(차트)에서 주가 갈무리(크롤링)하기
| 졸리운_곰 | 2023.12.08 | 1495 |
| » |
[데이터 수집 및 전처리] 네이버 증권에서 일봉, 주봉 데이터 가져오기
| 졸리운_곰 | 2023.12.08 | 1499 |
| 9 |
[데이터 수집 및 전처리] (놀라운) 한글 데이터 짱! AwesomeKorean_Data
| 졸리운_곰 | 2023.03.07 | 1197 |
| 8 |
[데이터 수집 및 전처리] Crawling, Scraping
| 졸리운_곰 | 2022.05.21 | 1476 |
| 7 |
[데이터분석][데이터수집 전처리] MS 엑셀(Excel)에서 UTF-8 로 된 csv 파일 가져오기
| 졸리운_곰 | 2021.09.30 | 1415 |
| 6 | 카프카 설치 시 가장 중요한 설정 4가지 | 졸리운_곰 | 2021.07.13 | 1925 |
| 5 |
Prometheus Query(PromQL) 기본 이해하기
| 졸리운_곰 | 2020.12.17 | 1413 |
| 4 |
[인프라 모니터링 오픈소스] Prometheus 를 알아보자
| 졸리운_곰 | 2020.12.17 | 1906 |
| 3 |
Prometheus + Grafana 대시보드
| 졸리운_곰 | 2020.12.17 | 2488 |
| 2 |
Grafana란?
| 졸리운_곰 | 2020.12.17 | 2158 |
| 1 | Importing wikipedia dump to MySql | 졸리운_곰 | 2020.10.04 | 2494 |

