Math equations

Sunday, June 16, 2013

파이썬으로 웹페이지에 로그인하기.


오늘 배운 Python 팁이다.

파이썬으로 일반 웹페이지의 HTML코드를 읽어오는 것은 쉽다.

http://www.boddie.org.uk/python/HTML.html 에 잘 나와있듯이

import urllib
# Get a file-like object for the Python Web site's home page.
f = urllib.urlopen("http://www.python.org")
# Read from the object, storing the page's contents in 's'.
s = f.read()
f.close()

이렇게 urllib을 써서 쉽게 할 수 있다.

파이썬으로 쿠키를 써서 인증을 해야하는 사이트에 접속하고 싶을 때는 약간 다르다. 이 문제에 관해서는 Stackoverflow에 답이 있고

How to use Python to login to a webpage and retrieve cookies for later usage?

한글로 번역된 웹페이지도 있다.

이 사이트들이 소개하고 있는 답은 다음과 같은 코드인데,
import urllib, urllib2, cookielib

username = 'myuser'
password = 'mypassword'

cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
login_data = urllib.urlencode({'username' : username, 'j_password' : password})
opener.open('http://www.example.com/login.php', login_data)
resp = opener.open('http://www.example.com/hiddenpage.php')
print resp.read()

이 코드를 레아시스를 예로 들어 살펴보자.

3,4번째 줄은 아이디와 비번을 입력하는 부분이고,
login_data = urllib.urlencode({'username' : username, 'j_password' : password})
이 부분을 제대로 수정하려면 해당 웹페이지의 로그인 화면의 Html코드를 살펴봐야한다. 다음은 레아시스의 로그인 창에 해당하는 코드다.


<input type="text" class="input_login" id="member_id" name="member_id" maxlength="20" required itemname="ID" value="ID"
onfocus="if (this.value=='ID') this.value='';" onblur="if (this.value=='') this.value='ID';"
style="padding-left:3px; ime-mode:disabled;" >
</div>

<div class="input_pw">
<input type="password" class="input_login" name="member_password" maxlength="20" itemname="PASSWORD"
style="width:128px;background:url(./design/login/basic_black/img/password.png) no-repeat;background-color:#ffffff;"
onfocus="this.style.backgroundImage=''" onblur="if (this.value=='') this.style.backgroundImage='url(./design/login/basic_black/img/password.png)';" >

노란색으로 표시된 부분을 참고, 다음과 같이 코드를 바꿔주자.
login_data = urllib.urlencode({'member_id' : username, 'member_password' : password})
 그 다음 opener부분을 바꾸기 위해서는 웹페이지의 히스토리를 참고하면 된다. 레아시스에 로그인할 때 logincheck.php의 주소를 이용,
opener.open('http://www.example.com/login.php', login_data)


opener.open('http://rheasis.com/framework/login/login_check.php', login_data)
로 바꿔준다.

그 다음엔 opener로 얻은 쿠키를 이용해서 인증이 필요한 곳에 접근할 수 있다.

예를 들어 이런 코드를 덧붙이면

f=opener.open('http://www.rheasis.com/rheasis/stock/?id=stock&code=20') 
print f.read()



http://www.rheasis.com/rheasis/stock/?id=stock&code=20 의 html을 출력한다.



이제 레아시스 웹페이지를 html로 볼 수 있게 되었다(--?)











No comments:

Post a Comment