파이썬/크롤링

파이썬 requests 를 이용해 네이버 주식 크롤링하기(동적 사이트 크롤링)

큰고양2 2023. 9. 4. 20:00

requests 임포트

 

import requests

 

웹서비스에서 url 찾아내기

requests를 통해 데이터를 크롤링 하기 위해서는 데이터를 받아올 url을 가져와야한다

이번 분석에는 삼성전자의 일별 주식 데이터를 가져와보자

크롬으로 

https://m.stock.naver.com/domestic/stock/005930/price

 

삼성전자 - 네이버 증권

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

m.stock.naver.com

로들어가 F12를 눌러 크롬 개발자 창으로 들어가자

개발자 창을 보면

이렇게 네트워크 옵션을 볼 수 있다

ctrl+L을 눌러 네트워크 로그를 초기화 하고

좌측 웹사이트에서 더보기를 누르면

이렇게 아까는 보이지 않았던 price 관련 로그가 남는다

이 로그는 더보기를 누를때마다 서버에서 추가 정보를 가져오는 옵션이다

이렇게 쓰라고 만든 url은 아니지만

여기서 데이터를 불러오는 url을 알 수 있다

https://m.stock.naver.com/api/stock/005930/price?pageSize=10&page=5

이라는url을 분석해보면

대충 뒤에서 price정보를 10개씩 불러오고 해당 페이지가 5페이지라는 의미다

 

데이터 불러오기

requests.get(url)

코드에 url을 넣으면 데이터를 불러올 수 있다

url에서 정상적으로 데이터가 불러와졌다면

<Response [200]>

이 출력된다

동적사이트에서 해당 방법으로 불러오는 데이터는 json형식의 데이터로

json 데이터는 쉽게 딕셔너리 혹은 리스트로 변환이 가능하다

변환을 위해서는 .json()매소드를 사용하면 된다

ex

samsung = requests.get('https://m.stock.naver.com/api/stock/005930/price?pageSize=60&page=1')
samsung.json()

데이터를 데이터 프레임으로 변경하기

이번 게시글에서는 일자별 최고가를 불러오도록 하겠다

import pandas as pd

로 판다스를 임포트 한 후

pd.DataFrame(samsung.json())[['highPrice']]

코드로 날짜와 일별 최고가만 따로 데이터 프레임으로 뽑아내

변수에 저장해주었다

 

이렇게 데이터를 분리했다고 끝이 아니다

dtypes로 데이터 형식을 살펴보면

불러온 데이터들의 형식이 문자형으로 되어있다는 사실을 알 수 있다

해당 데이터를 정확하게 이용하려면

숫자와 날짜 데이터로 변경해줄 필요가 있다

samsung_high['highPrice'] = samsung_high['highPrice'].apply(lambda x: x.replace(',', '')).astype('float')
samsung_high['localTradedAt'] = pd.to_datetime(samsung_high['localTradedAt'])

코드를 실행하면

각각 시간과  실수 형태로 데이터가 변한걸 확인 할 수 있다