야후, 구글이 Finance API를 변경함에 따라, 미국 주식의 가격정보를 파이썬(Python)으로 가져올 수 없게 되었습니다. Morningstar를 비롯한 몇 개 사이트에서는 여전히 API를 열어 두고는 있는데요.
반복 업무를 단순화할 수 있는 방법에 대해서 직장인 누구라면 고민해 본 적이 있을 거예요.
예를 들어 직무에 따라서는 거시경제 지표(환율, 금리, 주가 등)를 수집하기 위해서 매일 아침 출근하자마자 서둘러서 여기저기 사이트를 옮겨 다닌 경험이 있으실 거예요. 웹사이트를 하나하나 찾아다니며 Ctrl + C, Ctrl + V를 여러 번 반복해서 엑셀에 옮기는 작업은 여간 귀찮은 일이 아닐 수 없습니다.
엑셀, 파워포인트 같은 오피스 직무 스킬에 파이썬(Python)을 하나 더 추가해보면 어떨까요. 파이썬이 PC에 설치되었다는 가정 하에서 포스팅을 이어가겠습니다.
환율정보 조회
환율정보를 조회할 수 있는 웹사이트는 네이버, 다음 등 포털뿐만 아니라 외환은행, 국민은행 등 금융기관 홈페이지, 기타 금융 정보 제공 사이트 등 정말 많습니다.
외환 관련해서는 외환은행이 가장 정보제공이 빠르고 정확하겠지만, 금융기관 사이트는 보안 기능이 강화되어서 파이썬 라이브러리로 쉽게 정보를 수집하기가 어려워졌습니다.
네이버 환율조회(링크 : https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=1&ie=utf8&query=%ED%99%98%EC%9C%A8%EC%A1%B0%ED%9A%8C) 화면에서 웹스크래핑을 하는 방법을 소개하겠습니다.
pandas 라이브러리
표(talbe) 형식으로 정리된 자료는 pandas 라이브러리를 먼저 시도하면 좋습니다. read_html 함수를 사용하면 html 페이지에 <table> tag로 구성된 부분을 모두 가져와서 표 리스트(list)를 만들어 주기 때문입니다. (다만, 자바스크립트로 만들어진 동적 웹페이지에서는 작동하지 않는 경우가 많습니다.)
위 링크를 통해 네이버 환율조회 화면을 살펴보면, 미국 달러 환율 그래프가 있고 하단에 미국, 일본 등 8개 국가 통화에 대한 원화 환율(매매기준율)이 표 형식으로 정리되어 있습니다.
Step 1: pandas 라이브러리를 불러와서 pd라는 이름으로 설정합니다.
import pandas as pd
Step 2: 네이버 환율조회 링크를 url이라는 변수에 지정합니다.
url ='https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=1&ie=utf8&query=%ED%99%98%EC%9C%A8%EC%A1%B0%ED%9A%8C'
Step 3: pandas.read_html 함수에 url을 인자로 전달하고, 실행한 결과를 tables 변수에 지정합니다.
tables = pd.read_html(url)
테이블 내용 확인하기 (tables 변수)
tables 내용을 출력하면, 리스트를 나타내는 [ ] 안에 콤마(,)로 구분된 2개의 표가 있습니다.
tables에 몇 개의 요소(표)가 있는지 확인하려면 len 함수를 사용합니다. 2개의 요소(표)가 있는 것을 알 수 있습니다.
우리가 수집하려고 하는 환율정보는 2번째 표이기 때문에 리스트 인덱싱을 사용합니다. tables[1]이라고 입력하면 2번째 표를 나타냅니다. (파이썬에서는 순서를 셀 때 1이 아니라 0부터 시작합니다.)
엑셀(Excel) 파일 저장하기
환율 조회표를 엑셀 파일로 저장하는 코드를 추가하겠습니다. 편의상 tables[1]에 들어 있는 표(dataframe 타입으로 저장되어 있음)를 df 변수에 지정합니다.
df = tables[1]
pandas 라이브러리에 있는 to_excel 함수를 사용하면, dataframe 타입의 표를 엑셀 파일로 바로 저장할 수 있습니다.
df.to_excel('exchange rate.xlsx')
엑셀 파일을 열면 아래와 같이 표 형태로 저장됩니다.
요약하며....
코드를 모아서 정리하면 총 5줄입니다. 간단하게 환율 정보 정리가 가능하지 않나요? 직장인 렙업을 위해 사무환경에서 자동화할 수 있는 작업들에 대하여 노하우를 계속 공유하겠습니다.