黄聪:使用 Python 登录网站
来源:互联网 发布:rpm下载yum安装包下载 编辑:程序博客网 时间:2024/04/30 07:03
对于大部分论坛,我们想要抓取其中的帖子分析,首先需要登录,否则无法查看。
这是因为 HTTP 协议是一个无状态(Stateless)的协议,服务器如何知道当前请求连接的用户是否已经登录了呢?有两种方式:
- 在URI 中显式地使用 Session ID;
- 利用 Cookie,大概过程是登录一个网站后会在本地保留一个 Cookie,当继续浏览这个网站的时候,浏览器会把 Cookie 连同地址请求一起发送过去。
Python 提供了相当丰富的模块,所以对于这种网络操作只要几句话就可以完成。我以登录 QZZN 论坛为例,事实上下面的程序几乎所有的 PHPWind 类型的论坛都是适用的。
# -*- coding: GB2312 -*-from urllib import urlencodeimport cookielib, urllib2# cookiecj = cookielib.LWPCookieJar()opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))urllib2.install_opener(opener)# Loginuser_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 这类的名字是从哪儿来的,这就要分析需要登录的网页了。我们知道,一般的登录界面都是一个表单,节选如下:
<form action="login.php?" method="post" name="login" onSubmit="this.submit.disabled = true;">
<input type="hidden" value="" name="forward" />
<input type="hidden" value="http://bbs.qzzn.com/index.php" name="jumpurl" />
<input type="hidden" value="2" name="step" />
...
<td width="20%" onclick="document.login.pwuser.focus();"><input type="radio" name="lgt" value="0" checked />用户名 <input type="radio" name="lgt" value="1" />UID</td>
<td><input class="input" type="text" maxLength="20" name="pwuser" size="40" tabindex="1" /> <a href="reg1ster.php">马上注册</a></td>
<td>密 码</td>
<td><input class="input" type="password" maxLength="20" name="pwpwd" size="40" tabindex="2" /> <a href="sendpwd.php" target="_blank">找回密码</a></td>
...
</form>
从这里可以看出,我们需要输入的用户名密码对应的就是 pwuser 和 pwpwd,而 step 对应的则是登录(这个是尝试出来的)。
注意到,这个论坛表单采用的是 post 方式,如果是 get 方式则本文的方法就需要变动一下,不能直接 open,而是应该首先 Request,然后再 open。更详细的请看手册...
- 黄聪:使用 Python 登录网站
- 使用 Python 登录网站
- 暴力破解黄巴登录网站
- 使用python模拟登登录网站
- 黄聪:Python实现Discuz论坛的自动POST登录发贴回帖(转)
- 黄聪:Python网站采集功能(多线程的采集、WDPYSPIDER类、pycurl)
- 黄聪:如何使用Add
- Python 登录网站后台
- python 自动登录网站
- python模拟网站登录
- 腾讯万象优图鉴黄使用-python版
- 模拟网站登录实现----Python
- python requests 模拟网站登录
- 黄聪:python控制台无法正常显示中文字符串解决方法
- 黄聪:Python+NLTK自然语言处理学习(一):
- 使用python远程登录
- 使用程序自动登录网站
- Python自动登录带密码的网站
- Ghosts for Tea
- openfire3.9.3导入eclipse 按步骤来,可以正确导入!
- 提前祝:新春增福纳贤。下拉控件的数据绑定(2中方法)
- 对equals的总结
- django 存放静态资源方法。
- 黄聪:使用 Python 登录网站
- 20150126-20150131工作周志
- 08-1. 求一批整数中出现最多的个位数字(20)
- 取本地文件
- 黄聪:Python网站采集功能(多线程的采集、WDPYSPIDER类、pycurl)
- Android apk动态加载机制的研究
- 淘宝有假货,O2O模式或将成解决方案
- 网站出现503错误的原因
- 黄聪:Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)