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

 

이전 포스팅에서 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 86543
공지 [SQL컨셉] 서적 "SQL컨셉"의 샘플 데이타 베이스 SAMPLE DATABASE of ORACLE 가을의 곰을... 2013.02.10 78957
공지 [G_SQL] Sample Database 가을의 곰을... 2012.05.20 95706
33 [spark][sparksql][odbc][jdbc] JDBC and ODBC drivers and configuration parameters file 졸리운_곰 2021.04.14 4128
32 [spark][pyspark][php] Natively Connect to Spark Data in PHP 졸리운_곰 2021.04.14 1703
31 [SPARK][Python][pySpark][아콘 소프트][나무기술] Real-world Python workloads on Spark: Standalone clusters : 스파크 예제 논란, driver-host 불필요 file 졸리운_곰 2021.04.03 1692
30 [Spark] Apache Spark Cluster(Standalone) 스파크 클러스터 스텐드 얼론 구축 졸리운_곰 2021.03.28 1527
29 [Spark][머신러닝] Apache Spark-Python vs Scala 성능 비교 file 졸리운_곰 2021.03.21 1155
28 [Spark][MSA] Apache Spark - Key/Value Paris (Pair RDD) 졸리운_곰 2021.03.21 1588
27 [Spark][머신러닝] Apache Spark - RDD (Resilient Distributed DataSet) Persistence file 졸리운_곰 2021.03.21 1312
26 [Spark][머신러닝] Apache Spark - RDD (Resilient Distributed DataSet) 이해하기 - #2 file 졸리운_곰 2021.03.21 1086
25 [Spark][머신러닝] Apache Spark - RDD (Resilient Distributed DataSet) 이해하기 - #1 file 졸리운_곰 2021.03.21 1681
24 [Spark][머신러닝] Apache Spark 소개 - 스파크 스택 구조 file 졸리운_곰 2021.03.21 1320
23 [Spark] cache()와 persist()의 차이 file 졸리운_곰 2021.03.16 1550
22 [Spark] Spark - RDD vs Dataframes vs Datasets 우리는 언제, 왜 RDD, Dataframes, Datasets를 사용해야 할까? file 졸리운_곰 2021.03.15 1318
21 [Spark & Oracle] Reading Data From Oracle Database With Apache Spark file 졸리운_곰 2021.03.15 1149
20 [spark][pySpark] 스파크 튜토리얼 - 스파크 SQL file 졸리운_곰 2021.03.15 1859
19 [spark][flask][python] Machine learning at Scale using Pyspark & deployment using AzureML/Flask file 졸리운_곰 2021.03.14 2036
18 [pySpark, 파이썬 spark] Best Practices Writing Production-Grade PySpark Jobs file 졸리운_곰 2021.03.14 1696
17 [apache spark] 아파치 스파크 Data Sharing between multiple Spark Jobs in Databricks file 졸리운_곰 2021.03.13 1792
16 [Apache Spark] Spark SQL 아파치 스파크 SQL 개요 졸리운_곰 2021.03.13 1283
15 [spark] Apache Livy: A REST Interface for Apache Spark file 졸리운_곰 2021.03.12 1354
14 [spark] Spark 및 Oracle 데이터베이스 file 졸리운_곰 2021.03.06 1412
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED