Python 登录网站详解及实例
Python登录网站详解及实例
对于大部分论坛,我们想要抓取其中的帖子分析,首先需要登录,否则无法查看。
这是因为HTTP协议是一个无状态(Stateless)的协议,服务器如何知道当前请求连接的用户是否已经登录了呢?有两种方式:
- 在URI中显式地使用SessionID;
- 利用Cookie,大概过程是登录一个网站后会在本地保留一个Cookie,当继续浏览这个网站的时候,浏览器会把Cookie连同地址请求一起发送过去。
Python提供了相当丰富的模块,所以对于这种网络操作只要几句话就可以完成。我以登录QZZN论坛为例,事实上下面的程序几乎所有的PHPWind类型的论坛都是适用的。
#-*-coding:GB2312-*- fromurllibimporturlencode importcookielib,urllib2 #cookie cj=cookielib.LWPCookieJar() opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) urllib2.install_opener(opener) #Login user_data={'pwuser':'你的用户名', 'pwpwd':'你的密码', 'step':'2' } url_data=urlencode(user_data) login_r=opener.open("http://bbs.qzzn.com/login.php",url_data)
一些注释:
- urllib2显然是比urllib高级一点的模块,里面包括了如何使用Cookies。
- 在urllib2中,每个客户端可以用一个opener来抽象,每个opener又可以增加多个handler来增强其功能。
- 在构造opener时指定了HTTPCookieProcessor做为handler,因此这个handler支持Cookie。
- 使用isntall_opener后,调用urlopen时会使用这个opener。
- 如果不需要保存Cookie,cj这个参数可以省略。
- user_data存放的就是登录所需要的信息,在登录论坛的时候把这个信息传递过去就行了。
- urlencode功能是把字典user_data编码成"?pwuser=username&pwpwd=password"的形式,这样做是为了使程序易读一些。
最后一个问题是,pwuser、pwpwd这类的名字是从哪儿来的,这就要分析需要登录的网页了。我们知道,一般的登录界面都是一个表单,节选如下:
... 用户名 UID 马上注册 密码 ... 找回密码
从这里可以看出,我们需要输入的用户名密码对应的就是pwuser和pwpwd,而step对应的则是登录(这个是尝试出来的)。
注意到,这个论坛表单采用的是post方式,如果是get方式则本文的方法就需要变动一下,不能直接open,而是应该首先Request,然后再open。更详细的请看手册...
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!