본문 바로가기
개발 프로젝트/Python

Python 웹 크롤링을 활용한 원자재 가격 데이터 수집 (1)

by BuyAndPray 2020. 11. 22.
반응형

개인적으로 원자재 가격과 주가와의 상관관계는 수치적으로 얼마 정도 될까라는 의구심을 항상 품고 있었다. 그 의구심을 해결하고자 파이썬 웹 크롤링을 활용해 원자재 가격 데이터와 주가 데이터를 수집한 뒤 상관관계를 분석해보도록 하겠다.

 

사실 The World Bank에서 Monthly Price를 선택하면 간편하게 엑셀로 받을 수 있지만 웹 크롤링 연습도 할 겸 해서 한 번 해보았다.

 

월별 원자재 가격 데이터

 

BeautifulSoup 라이브러리 설치

먼저 웹 크롤링을 하다 보면 HTML 문서를 태그 단위로 파싱(Parsing)할 필요가 있는데 이때 유용한 파이썬 라이브러리가 BeautifulSoup 라이브러리다. 

 

BeautifulSoup는 bs4 패키지를 설치해야 사용할 수 있다.

pip install bs4

설치가 완료되면 아래와 같이 bs4 모듈에서 BeautifulSoup를 import 해준다.

from bs4 import BeautifulSoup

 

웹 크롤링할 사이트 분석

웹 크롤링을 진행할 때 가장 중요한 것은 크롤링할 사이트를 분석하는 것이다. 잘 분석하기만 하면 selenium으로 복잡하게 크롤링할 것도 코드 몇 줄로 간단하게 해결된다.

 

Investing.com Commodities을 보면 아래와 같이 원자재 가격(선물)이 나온다.

 

Investing.com 원자재 가격 데이터

과거 데이터를 보기 위해서는 상품을 선택 한 뒤 일반 > 과거 데이터로 이동하면 된다.

 

원자재 과거 데이터 보는 법

 

하지만 기본으로 기간은 일간으로 세팅되어 있고, 볼 수 있는 데이터도 한 달로 고정되어있다.

WTI유 과거 가격 데이터

이런 경우 무작정 selenium을 쓰기보다 사이트를 분석해보면서 어떤 식으로 서버와 데이터를 주고받는지 확인하는 것이 좋다. 먼저 개발자 도구(F12)를 킨 뒤 Network 탭에 들어간다. 그런 뒤 빨간색 원 오른쪽에 있는 Clear 버튼을 눌러 Network activity들을 지운다. 실시간으로 계속 activity들이 들어올 텐데 별로 신경 쓰지 않아도 된다. 그다음 사이트를 변화시키면서 서버와 어떻게 데이터를 주고받는지 확인한다. 

 

원자재 가격 정보 같은 경우 날짜를 변화시키면 Network 탭에서 HistoricalDataAjax가 생기는 것을 볼 수 있다. 어떻게 바로 알아냈는지 궁금해 할 수도 있는데, 날짜를 변화시켰지만 사이트가 다시 로딩되지 않고 서버에서 데이터를 받아오는 것을 봐서 ajax를 활용한 웹 폴링 방식을 사용할 것이라고 생각했다. 그런 관점에서 보면 HistoricalDataAjax는 이름부터가 ajax를 포함하고 있기 때문에 딱 맞아떨어진다. 

 

HistoricalDataAjax 생성

 

결과 확인해보기 위해서 HistoricalDataAjax를 선택한 뒤 Preview 탭을 선택하면, 선택한 기간 동안 원자재 가격 정보가 나오는 것을 볼 수 있다.

 

HistoricalDataAjax Preview

그리고 Headers탭에 들어가서 요청 정보를 살펴보면 아래와 같이 서버에 POST 요청을 보내고 함께 요청을 보내는 Form Data는 아래와 같다. 결론적으로 이렇게 서버가 ajax로 동작하는 경우 웹 사이트를 크롤링하기보다 해당 ajax 통신을주고받는 URL로 요청을 보내는 것이 편리하다.

 

POST 요청과 Form Data

 

원자재 가격과 주가와의 상관관계 분석 시리즈

반응형

댓글