Coding/Python Matlab

파이썬 - twill을 이용한 web login & data scraping

smores 2012. 1. 21. 10:41
stock 분석을 시작하면서 한동안 google finance에서의 주식 데이터를 얻는데 로그인을 한 후 얻어야 할 경우가 있었다. 로그인 한 경우와 로그인 하지 않은 경우에 받을 수 있는 데이터의 차이가 있어서였다. 한 주식(예를들어 AAPL; 애플)의 chart 화면에서 web source를 읽어 보면 2분/1일/1주 차트 데이터가 들어있는데, 로그인을 하면 매 틱마다의 close, volume만이 아니라 high/low/open을 다 얻는다. 하지만 로그인 없이는 close, volume 밖에 없다.

google finance 로그인 한 경우


google finance 로그인 하기 전

 
이 외에도 회원으로 가입된 사이트에 로그인 해야 얻을 수 있는 자료가 훨씬 많음은 상식적으로도 당연하다. 하지만 Java를 간신히 배워 프로그램 만들던 수준에서는 이러한 일을 해결할 실력이 안되어 포기하고 말았다.

얼마전 Python을 새로 배워서 조금씩 응용하기 시작하면서 다시한번 위의 문제에 대한 도전을 할 생각이 들었다. 구글링을 열심히 해 보니 twill이라는 라이브러리가 있기에 (이것을 시도하기 전에는 iMacro로 로그인 하고 html 소스 저장하는 것 까지는 성공했었다. 하지만 하나의 응용 프로그램에 합쳐서 돌아가는 것이 아니라 그다지 마음에 드는 방법은 아니었다) 사용법을 배우고자 했는데 왠지 쉬운 설명과 예제가 잘 보이질 않아서 이래 저래 시도한 끝에 성공했기에 방법을 기록으로 남기고자 한다.


1) twill library download 및 install
    python directory가 path에 있는 상태에서 twill lib 압축해제 한 directory로 가서 
    python setup.py install 
    (파이선은 프로그램 인스톨도 참 쉽고 편하다!!!)

2) twill lib import한 후 일련의 함수들을 적절히 사용하면 login 후 site web source scrap 가능
 
다음은 google finance에서 AAPL 및 DOW 주식 데이터를 포함한 web source 저장하는 예제

from twill.commands import * 

userid = "yourid" 
passwd = "yourpassword" 

go('https://accounts.google.com/ServiceLogin?service=mail&passive=true&rm=false&continue=https://mail.google.com/mail/
&ss=1&scc=1&ltmpl=default&ltmplcache=2') 

showforms() 
formvalue(1, 'Email', userid) 
formvalue(1, 'Passwd', passwd) 
submit() 

go('http://www.google.com/finance?q=AAPL')
save_html('c:\\z\\AAPL-3.htm')

go('http://www.google.com/finance?q=DOW')
save_html('c:\\z\\DOW-3.htm')