파이썬 requests 를 이용해 네이버 주식 크롤링하기(동적 사이트 크롤링)
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'])
코드를 실행하면
각각 시간과 실수 형태로 데이터가 변한걸 확인 할 수 있다