Python 登录网站详解及实例


Posted in Python onApril 11, 2017

Python 登录网站详解及实例

对于大部分论坛,我们想要抓取其中的帖子分析,首先需要登录,否则无法查看。

这是因为 HTTP 协议是一个无状态(Stateless)的协议,服务器如何知道当前请求连接的用户是否已经登录了呢?有两种方式:

  1. 在URI 中显式地使用 Session ID;
  2. 利用 Cookie,大概过程是登录一个网站后会在本地保留一个 Cookie,当继续浏览这个网站的时候,浏览器会把 Cookie 连同地址请求一起发送过去。

Python 提供了相当丰富的模块,所以对于这种网络操作只要几句话就可以完成。我以登录 QZZN 论坛为例,事实上下面的程序几乎所有的 PHPWind 类型的论坛都是适用的。

# -*- coding: GB2312 -*-

from urllib import urlencode
import cookielib, 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 这类的名字是从哪儿来的,这就要分析需要登录的网页了。我们知道,一般的登录界面都是一个表单,节选如下:

<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" rel="external nofollow" >马上注册</a></td> 
<td>密 码</td> 
<td><input class="input" type="password" maxLength="20" name="pwpwd" size="40" tabindex="2" /> <a href="sendpwd.php" rel="external nofollow" target="_blank">找回密码</a></td> 
... 
</form>

从这里可以看出,我们需要输入的用户名密码对应的就是 pwuser 和 pwpwd,而 step 对应的则是登录(这个是尝试出来的)。

注意到,这个论坛表单采用的是 post 方式,如果是 get 方式则本文的方法就需要变动一下,不能直接 open,而是应该首先 Request,然后再 open。更详细的请看手册...

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Python 相关文章推荐
Python中map和列表推导效率比较实例分析
Jun 17 Python
python如何在终端里面显示一张图片
Aug 17 Python
深入理解NumPy简明教程---数组1
Dec 17 Python
python 实现自动远程登陆scp文件实例代码
Mar 13 Python
Python正则捕获操作示例
Aug 19 Python
浅谈Scrapy网络爬虫框架的工作原理和数据采集
Feb 07 Python
libreoffice python 操作word及excel文档的方法
Jul 04 Python
使用python模拟命令行终端的示例
Aug 13 Python
PyQt使用QPropertyAnimation开发简单动画
Apr 02 Python
Python利用Xpath选择器爬取京东网商品信息
Jun 01 Python
python中如何使用虚拟环境
Oct 14 Python
python 标准库原理与用法详解之os.path篇
Oct 24 Python
python实现FTP服务器服务的方法
Apr 11 #Python
python读写json文件的简单实现
Apr 11 #Python
Python实现Mysql数据库连接池实例详解
Apr 11 #Python
详解Python中类的定义与使用
Apr 11 #Python
python获取指定时间差的时间实例详解
Apr 11 #Python
一个基于flask的web应用诞生 组织结构调整(7)
Apr 11 #Python
一个基于flask的web应用诞生 记录用户账户登录状态(6)
Apr 11 #Python
You might like
据说是雅虎的一份PHP面试题附答案
2009/01/07 PHP
PHP XML备份Mysql数据库
2009/05/27 PHP
PHP 开源AJAX框架14种
2009/08/24 PHP
smarty巧妙处理iframe中内容页的代码
2012/03/07 PHP
php字符串比较函数用法小结(strcmp,strcasecmp,strnatcmp及strnatcasecmp)
2016/07/18 PHP
php preg_match的匹配不同国家语言实例
2016/12/29 PHP
PHP数组遍历的几种常见方式总结
2019/02/15 PHP
jquery实现文本框鼠标右击无效以及不能输入的代码
2010/11/05 Javascript
js拦截alert对话框另类应用
2013/01/16 Javascript
jquery插件tooltipv顶部淡入淡出效果使用示例
2013/12/05 Javascript
JavaScript按位运算符的应用简析
2014/02/04 Javascript
jquery获取元素索引值index()示例
2014/02/13 Javascript
jQuery实现将div中滚动条滚动到指定位置的方法
2016/08/10 Javascript
js实现点击按钮复制文本功能
2020/07/20 Javascript
ElementUI radio组件选中小改造
2019/08/12 Javascript
实现vuex原理的示例
2020/10/21 Javascript
Vue2.0 ES6语法降级ES5的操作
2020/10/30 Javascript
python中enumerate的用法实例解析
2014/08/18 Python
使用Django Form解决表单数据无法动态刷新的两种方法
2017/07/14 Python
Python爬虫通过替换http request header来欺骗浏览器实现登录功能
2018/01/07 Python
pandas数据清洗,排序,索引设置,数据选取方法
2018/05/18 Python
python实现三次样条插值
2018/12/17 Python
python如何通过闭包实现计算器的功能
2020/02/22 Python
Centos7下源码安装Python3 及shell 脚本自动安装Python3的教程
2020/03/07 Python
Django 删除upload_to文件的步骤
2020/03/30 Python
详解Pymongo常用查询方法总结
2021/01/29 Python
大学生年度自我鉴定
2013/10/31 职场文书
租房合同协议书
2014/04/09 职场文书
环卫工人先进事迹材料
2014/06/02 职场文书
倡导文明标语
2014/06/16 职场文书
求职自我推荐信
2014/06/25 职场文书
支行行长竞聘报告
2014/11/06 职场文书
2015年见习期工作总结
2014/12/12 职场文书
教师年终个人总结
2015/02/11 职场文书
电子表的操作介绍说明书
2019/10/28 职场文书
python 解决微分方程的操作(数值解法)
2021/05/26 Python