Data Engineering/Crawling

[Crawling] KOSPI 주가 크롤링

YSY^ 2020. 8. 4. 18:00

https://m.stock.naver.com/sise/siseIndex.nhn?code=KOSPI

 

코스피 - 네이버 증권

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

m.stock.naver.com

 

코스피 주가 크롤링을 위해 네이버 증권을 이용하였다.

 

해당페이지에서 크롤링하기 전 먼저 살펴보아야하는 것이 있다.

먼저 F12를 누른다음 'NETWORK'탭으로 들어간다.

아무것도 없다.

 

하지만 스크롤을 좀만 내리다보면

무언가 갑자기 나타났다.

 

스크롤을 더 내리다보면

또 나타났다.

아무것도 누르지 않고 단지 스크롤만 내렸을 뿐이지만 신호가 왔다갔다하는 것을 볼 수 있다.

 

이번에는 저 링크로 들어가보겠다.

데이터가 들어있다.

 

처음에 네이버증권을 틀었을때는 이용자가 어느정도까지 스크롤을 내릴지 모르기 때문에 데이터를 가지고 오지 않는다.

그리고 이용자가 스크롤을 내리면 그제서야 그만큼의 데이터를 가지고 오는것이다.

네이버에서 스크롤을 내릴때마다 데이터를 이용자의 웹에 전송하고 이용자의 웹브라우저가 이를 재구성해서 화면에 표시해주는 것이다.(1페이지, 2페이지 이렇게 데이터를 전송해 준다.)

따라서 크롤링 역시 페이지 단위로 실시하여야한다.

 

위의 사실을 감안하여 크롤링 코드를 작성하였다.

base_url = 'https://m.stock.naver.com/api/json/sise/dailySiseIndexListJson.nhn?code=KOSPI&pageSize=100&page={}'

import requests
from pprint import pprint
url = base_url.format(1)

for page in range(1,10): #10페이지 까지 가지고 온다.
    url = base_url.format(page)
    print(url)

#결과

https://m.stock.naver.com/api/json/sise/dailySiseIndexListJson.nhn?code=KOSPI&pageSize=100&page=1
https://m.stock.naver.com/api/json/sise/dailySiseIndexListJson.nhn?code=KOSPI&pageSize=100&page=2
https://m.stock.naver.com/api/json/sise/dailySiseIndexListJson.nhn?code=KOSPI&pageSize=100&page=3
https://m.stock.naver.com/api/json/sise/dailySiseIndexListJson.nhn?code=KOSPI&pageSize=100&page=4

 

res.text코드로 res를 확인해보면

'result' 밑에 'siseList'가 있고 그 밑에 데이터들이 있는 것을 볼 수 있다.

import pandas as pd

url = base_url.format(1) #첫페이지만 가지고 온다.

res = requests.get(url)
if res.status_code == 200:
    data = res.json()
    kospi_list = data['result']['siseList']
    pprint(kospi_list)
    df = pd.DataFrame(kospi_list)

#결과

728x90
반응형