木匣子

Web/Game/Programming/Life etc.

Python 绕过网站登陆

学校的教学文件系统是半封闭的,学生登陆后选择指定的教师目录才可以查看里面的文件,对于某些加密的文件列表还需要输入密码才可以登陆。学生可以通过链接下载那些公开课件等教学资源。但是系统并没有提供一个检索引擎供学生搜索教学文件系统里的所有资源。

经过一番摸索,我发现如果直接在地址栏引用特定的文件索引号(id),就可以下载该链接对应的文件。这一途径给我提供了一条思路:可以写一个爬虫程序将教学文件系统上的所有资源扒出来,列成一个目录。如果再配上 sqlite 就可以完成一个简单的搜索引擎。

Python 是非常适合完成这类任务的工具,于是简单地学习了一下。

对于一个新手来说,最大的障碍在于如何验证网站的登陆。教学文件系统的登陆是带验证码的,要在程序里直接模拟登陆还是有一定的难度。一个比较合理的办法是写一个GUI界面,让用户直接登陆,然后使用获得的 COOKIE 进行检索**。**既然一定要用到 COOKIE,那么我想到一个更加直接的方法:将一个已经登陆系统的 COOKIE 复制到程序中,这样不就可以了?这很像黑客经常使用的 COOKIE 欺骗 手法,不过这招相当管用。对于这种一次性的工作,这种直接绕过登陆的方法效率最高了。

import urllib2
# do something before...
cookie = 'PHPSESSID=c694de6be36b1f8b03077f4e2ade94f1' #填写COOKIE
header = {'Cookie':str(cookie)}
request = urllib2.Request(url, headers = header)
response = urllib2.urlopen(request)
# do somthing after ...
response.close()

经过测试,这个方法很成功地绕过了网站登陆。但是在每次想更新列表的时候,需要使用新的可用的 COOKIE。还好这不是经常要做的工作,暂时可以接受。