-
네이버에서 PYTHON으로 삼성전자 주가 가져오기PYTHON(파이썬)/파이썬 활용 2024. 11. 1. 04:15728x90반응형
네이버에서 제공하는 주식 정보를 조회하는 간단한 API 호출을 구현한 프로그램
### 주요 기능 요약:
- **주식 정보 조회 (`get_sise` 함수)**: 특정 주식 코드에 대해 주어진 기간의 주식 데이터를 가져오는 함수입니다.
- **사용된 모듈**:
- `urllib.parse`의 `parse.urlencode`: 요청 매개변수를 URL에 인코딩하기 위해 사용됩니다.
- `requests`: 네이버 API에 HTTP GET 요청을 보내기 위해 사용됩니다.
- `ast.literal_eval`: 응답 데이터를 안전하게 파싱하기 위해 사용됩니다.
### 세부 기능 분석:
1. **함수 정의**:
```python
def get_sise(code, start_time, end_time, time_from='day'):
```
- `code`: 주식 종목 코드 (예: '005930'은 삼성전자).
- `start_time`, `end_time`: 데이터 조회 시작 및 종료 날짜 (형식: 'YYYYMMDD').
- `time_from`: 시간 프레임 (예: 'day', 'week' 등).
2. **URL 매개변수 구성**:
```python
get_param = {
'symbol': code,
'requestType': 1,
'startTime': start_time,
'endTime': end_time,
'timeframe': time_from
}
get_param = parse.urlencode(get_param)
```
- 주어진 매개변수로 `get_param` 딕셔너리를 만든 후, `parse.urlencode`를 사용하여 URL 쿼리 매개변수 형식으로 변환합니다.
3. **URL 생성 및 API 호출**:
```python
url = "https://api.finance.naver.com/siseJson.naver?%s" % (get_param)
response = requests.get(url)
```
- `url`은 네이버의 금융 API를 호출하기 위해 만들어집니다. `requests.get(url)`을 사용하여 해당 URL로 HTTP GET 요청을 보냅니다.
4. **응답 데이터 파싱**:
```python
return literal_eval(response.text.strip())
```
- 응답 데이터는 문자열로 반환되므로 `literal_eval`을 사용하여 파이썬 객체로 변환합니다. 이 방법은 응답 데이터가 JSON 형식과 유사한 경우 매우 편리합니다.
### 코드 사용 예:
```python
print(get_sise('005930', '20230721', '20230730', 'day'))
```
- 삼성전자(005930)의 주식 데이터를 2023년 7월 21일부터 7월 30일까지 일 단위로 조회합니다.
### 데이터 흐름 분석:
1. 사용자가 종목 코드와 날짜 정보를 함수에 입력합니다.
2. 함수가 해당 매개변수를 기반으로 네이버 금융 API에 HTTP GET 요청을 전송합니다.
3. 응답 데이터를 문자열로 받은 후, `literal_eval`을 사용하여 리스트로 변환한 뒤 반환합니다.
### 네이버 API 특성:
- 네이버에서 제공하는 주식 데이터 API는 비공식 API로, 안정성과 접근성이 보장되지 않을 수 있습니다. 데이터를 수집하는 동안 서버의 응답이 일관되지 않을 수 있고, 갑자기 서비스가 중단될 가능성도 있습니다. 공식적인 API나 제공되는 SDK가 있다면 사용하는 것이 더 좋습니다.
결론적으로 이 코드는 특정 기간 동안 주식의 시세 데이터를 수집하기 위한 간단한 기능을 제공하며, `requests`와 `urllib` 모듈을 사용해 GET 요청을 구성하고 데이터를 가져오는 데 초점을 두고 있습니다. 보안성, 안정성, 오류 처리를 강화하여 실 사용 시 발생할 수 있는 문제를 대비하는 것이 필요합니다.## naver에서 주식 정보 조회#from urllib import parsefrom ast import literal_evalimport requests
def get_sise(code, start_time, end_time, time_from='day') :get_param = {'symbol':code,'requestType':1,'startTime':start_time,'endTime':end_time,'timeframe':time_from}get_param = parse.urlencode(get_param)response = requests.get(url)return literal_eval(response.text.strip())print(get_sise('005930', '20230721', '20230730', 'day'))조회된 내용을 보기 쉽게 보완하고 종가 기준으로 챠트를 생성한 소스
챠트에 한글 표시하도록 폰트 설정 추가
import pandas as pdimport matplotlib.pyplot as pltfrom matplotlib import font_manager, rcfrom urllib import parsefrom ast import literal_evalimport requestsimport platform
# 한글 폰트 설정if platform.system() == 'Windows':font_path = "c:/Windows/Fonts/malgun.ttf" # Windows의 경우 사용 가능한 한글 폰트 설정elif platform.system() == 'Darwin':font_path = "/System/Library/Fonts/AppleGothic.ttf" # MacOS의 경우 사용 가능한 한글 폰트 설정else:font_path = "/usr/share/fonts/truetype/nanum/NanumGothic.ttf" # Linux의 경우 사용 가능한 한글 폰트 설정
font = font_manager.FontProperties(fname=font_path).get_name()rc('font', family=font)
def get_sise(code, start_time, end_time, time_from='day'):get_param = {'symbol': code,'requestType': 1,'startTime': start_time,'endTime': end_time,'timeframe': time_from}get_param = parse.urlencode(get_param)response = requests.get(url)return literal_eval(response.text.strip())
def format_sise_data(data):# 첫 번째 행은 컬럼 이름이므로 따로 처리해줍니다.columns = data[0]# 두 번째 행부터는 실제 데이터입니다.rows = data[1:]# pandas DataFrame으로 변환합니다.df = pd.DataFrame(rows, columns=columns)return df
# 주식 데이터를 조회하고 보기 좋게 출력합니다.data = get_sise('005930', '20230721', '20230730', 'day')formatted_data = format_sise_data(data)print(formatted_data)
# 날짜별로 차트 형태로 조회합니다.formatted_data['날짜'] = pd.to_datetime(formatted_data['날짜'])formatted_data.set_index('날짜', inplace=True)
# 차트 그리기plt.figure(figsize=(10, 5))plt.plot(formatted_data.index, formatted_data['종가'], marker='o', linestyle='-', label='종가')plt.xlabel('날짜')plt.ylabel('종가')plt.title('삼성전자 (005930) 종가 추이')plt.xticks(rotation=45)plt.grid(True)plt.legend()plt.tight_layout()plt.show()728x90'PYTHON(파이썬) > 파이썬 활용' 카테고리의 다른 글
첨부파일을 포함한 e-mail 보내기 (17) 2024.11.14 python으로 간단하게 e-mail 보내기 (2) 2024.11.13 MCPROTOCOL을 이용한 미쓰비시 PLC 통신 (2) 2024.11.01 파이썬으로 작성한 SERIAL 통신 프로그램 (0) 2024.10.31 PC에 연결된 SERIAL PORT 찾기 (파이썬 그리고 C#) (1) 2024.10.31