본문 바로가기

Programming/Python Tutorials

[PYTHON 3] Tutorials 23. Downloading Files from the web - 파일 다운로드 하기 using 파이썬


안녕하세요. 이번 시간에는 지난 시간의 이미지(사진) 다운받기에 이어 파일을 다운받아 보도록 하겠습니다. 이미지 다운과는 약간 다르지만, 크게 어렵지는 않으니 느긋하게 읽어보시면 쉽게 이해할 수 있을 겁니다. 그럼 시작하겠습니다.


주식 분석을 위한 시세 자료를 다운 받기 할 예정입니다.


이제까지는 import 뒤에 불러올 모듈명을 바로 적어 주었습니다. 그런데 아래 그림은 앞에 from 을 적어주고 import 뒤 모듈명을 적어 주었네요. 이는 추후에 클래스를 다룰때 보다 자세히 설명드려야 할 사항이므로 지금은 그냥 넘어가셔도 무방합니다.

주식 관련 CSV(Comma Separated Value)파일을 찾아보았는데, 야후 파이낸스에 올라와 있더군요. 그래서 'finance.yahoo.com'으로 접속을 하였습니다.

구글의 시세를 확인해 보고자 'goog'를 입력하였습니다. 그러나 최근 구글이 'Alphabet'으로 지주회사 형식으로 구조를 개편하여 옆에 알파벳 이라고 나옵니다. 

Nov 25th, 2015. 구글의 주식 가격입니다. 왼쪽에 보면 'Historical Prices' 창이 있는데 거기를 클릭합니다.

보이는 바와 같이 시가,저가,고가, 종가, 거래량 등등 기본적인 자료가 테이블 형식으로 나타납니다. 여기에서 아래 보이는 Download to Spreadsheet 에 마우스 오른쪽 클릭을 하면 'Copy Link' 를 눌러 URL 만 클립보드로 복사를 합니다.

이렇게 클립보드에 상위의 데이터가 있는 URL을 아래 그림처럼 'google_stock_url' 이라는 변수에 저장을 시켜줍니다.

이제 데이터를 다운받기 위한 함수를 정의하도록 하겠습니다. 아래 그림처럼 함수명을 지정하고 parameter는 csv_url 하나만 받게 하였습니다.

전달된 csv_url을 request.urlopen  을 이용하여 열겠다는 의미입니다. 그 결과를 response 변수에 저장을 합니다.

이렇게 저장된 response를 읽어 csv 라는 변수에 다시 저장을 합니다.

변수 csv 에 저장된 값들은 문자(string)도 존재할 것이며, 숫자(number)도 상존할 것입니다. 그래서 문자든, 숫자든 모두 문자화(convert to string) 시켜지구 위한 str() 을 사용하고, 그 결과를 str_csv 변수에 저장을 합니다.

str_csv 에는 데이터들이 중구난방으로 들어있는데, 이를 가독성있게 정렬을 하기 위해 split() 이라는 메소드를 사용하여 개행(줄바꿈)이 일어나는 단위로 한 줄씩 lines 변수에 저장을 하게 합니다. 그러면 한줄의 데이터 이후 줄바뀜이 일어나고 또 한줄의 데이터.....이렇게 데이터가 정렬이 이루어 지게 됩니다.

이제 파일을 저장할 때, 저장될 파일명을 기술하기 위해 아래와 같이 dest_url 에 r'google.csv' 을 넣어줍니다. 여기서 앞에 'r' 을 붙여준 이유는 'raw'값을 의미합니다. raw: 날것, 그대로 라는 의미로 변화가 없다는 의미입니다.

dest_url에 있는 값으로 파일을 쓰기모드('w')로 열어서 fx에 넣어줍니다.

lines 에는 한줄 한줄씩 여러줄의 데이터가 있는데, 이를 반복문을 사용해서 한줄 씩 처리를 하게 할 예정입니다.

한줄의 데이터와 "\n"(개행 혹은 줄바꿈) 을  fx에 한줄 쓰겠다는 의미입니다. 그 결과 한줄의 데이터와 가장 뒷자리에 줄바꿈이 함께 자리잡게 됩니다. 이러한 작업을 lines 의 길이만큼 반복을 하게 하면 fx에는 모든 데이터가 한줄 씩 기록이 되게 될 것입니다.

파일을 열었으니 닫아야겠죠?  fx.close()

함수 정의는 끝이 났습니다. 이제 이렇게 만들어 준 함수를 호출하여 실행을 시켜보겠습니다. 이 때 초반에 저장해 둔 google_stock_url 값을 함수의 인자로 넣어줍니다. 그럼 이 google_stock_url -> csv_url 값으로 전달이 되어 아래의 함수 명령순서대로 실행을 하게 될 것입니다.

네. 실행이 끝나고 에러 없이 종료가 되었네요. 그리고 왼편에 보니 google.csv 라는 파일이 하나 생성이 되어 있는게 보입니다.

google.csv 를 클릭해보니 finance.yahoo.com 에서 확인한 구글의 시세가 쭈욱 나타나는군요.


Comments

주식을 하시는 분들은 HTS(Home Trading System)에서 제공하는 툴만 잘 활용하셔도 충분할 것입니다. 그러나 제가 현재 하고 있는 방식은 국내 전종목 시세 및 재무제표 등등 모든 제반 데이터를 파이썬을 이용해서 수집 후 데이터 베이스로 저장을 시시각각 하게 하는 프로그램을 돌려놓고 있습니다. 이를 이용해서 R 이라고 하는 프로그램으로 분석을 하고, 또 다른 파이썬의 형태로 분석 및 예측이 자동으로 이루어지게 코딩을 해 둔 상황입니다. 이와 같은 작업을 하는데 기본 단계가 인터넷 상에 있는 수 많은 파일들을 핸들링 할 수 있는 단계라고 할 수 있습니다. 이해가 되지 않으시면 몇번 더 읽어 보시기 바랍니다. 이번 시간은 여기까지 하겠습니다. 수고하셨습니다.