카테고리 없음

네이버 증권 크롤링하기

chacha001 2024. 10. 3. 01:11

네이버 증권 사이트에서 주가 데이터를 수집해보자

- 수집할 데이터 : 일별 kospi, kosdaq 주가, 일별 환율(exchange rate) 데이터

 

네이버 증권은 pc웹페이지는 복잡한데 모바일은 깔끔하다

https://m.stock.naver.com

 

네이버페이 증권

관심종목의 실시간 주가를 가장 빠르게 확인하는 곳

m.stock.naver.com

 

 

여기서 데이터받아올 url 을 보는 방법은(크롬 기준)

1. F12 클릭해서 개발자 창 보기

2. 네트워크로 들어가기

3. 네트워크 로그 초기화 (좌측 상단에 빨간색 정지버튼 옆에 버튼 있음)

4. 알고싶은 정보 화면에서 더보기 클릭

5. 개발자 창에서 price 관련 로그 확인

6. 그 url 복사 (보통 api 어쩌구 되어있음 )

 

 

import requests
import pandas as pd

url = 'https://m.stock.naver.com/api/index/KOSPI/price?pageSize=10&page=2'

response = requests.get(url) #response로 선언
response

( 위 url은 네이버 증권주가 url 이다)

 

이 코드를 실행해서 Response [200]뜨면 성공이다

 

data = response.json()
df = pd.DataFrame(data)[['localTradedAt', 'closePrice']]
df.tail(2)

 

데이터 프레임 형태로 바꿔서 원하는 값면 컬럼에 넣어서 출력하면 

이런식으로 나온다.

 

데이터프레임 형태로 바꾸기 전에는 리스트 안에 딕셔너리 형태였다.

[{"localTradedAt":"2024-09-12","closePrice":"2,572.09","compareToPreviousClosePrice":"58.72","compar'

 

 

def stock(code='KOSPI', page_size=10, page=1):
    # 1. URL
    url = f'https://m.stock.naver.com/api/index/{code}/price?pageSize={page_size}&page={page}'
    print(url)
   
    # 2. request(URL) > response(JSON(str))
    response = requests.get(url)
   
    # 3. JSON(str) > list, dict > DataFrame
    data = response.json()
    return pd.DataFrame(data)[['localTradedAt', 'closePrice']]

df = stock(code='KOSDAQ',page_size = 60,page = 3)
df.head(2)

 

과정을 함수로 만들어서 원하는 만큼의 데이터를 가져올 수 있다.

참고로 네이버 증권은 한번에 page_size = 60을 최대로 걸어놓았다.