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创建XML文档
Mar 01 Python
Python的网络编程库Gevent的安装及使用技巧
Jun 24 Python
python 内置函数filter
Jun 01 Python
Python爬虫实现(伪)球迷速成
Jun 10 Python
解决Python中list里的中文输出到html模板里的问题
Dec 17 Python
python设定并获取socket超时时间的方法
Jan 12 Python
使用Python的SymPy库解决数学运算问题的方法
Mar 27 Python
Python爬虫爬取煎蛋网图片代码实例
Dec 16 Python
python计算导数并绘图的实例
Feb 29 Python
学python最电脑配置有要求么
Jul 05 Python
ubuntu16.04升级Python3.5到Python3.7的方法步骤
Aug 20 Python
Python实现给PDF添加水印的方法
Jan 25 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
桌面中心(四)数据显示
2006/10/09 PHP
从PHP的源码中深入了解stdClass类
2014/04/18 PHP
php使用unset()删除数组中某个单元(键)的方法
2015/02/17 PHP
php验证码实现代码(3种)
2015/09/07 PHP
win平台安装配置Nginx+php+mysql 环境
2016/01/12 PHP
是 WordPress 让 PHP 更流行了 而不是框架
2016/02/03 PHP
iOS+PHP注册登录系统 PHP部分(上)
2016/12/26 PHP
Laravel 已登陆用户再次查看登陆页面的自动跳转设置方法
2019/09/30 PHP
jQuery+ajax实现顶一下,踩一下效果
2010/07/17 Javascript
Jquery下判断Id是否存在的代码
2011/01/06 Javascript
更优雅的事件触发兼容
2011/10/24 Javascript
JS代码判断IE6,IE7,IE8,IE9的函数代码
2013/08/02 Javascript
javascript数组操作方法小结和3个属性详细介绍
2014/07/05 Javascript
node.js中的events.EventEmitter.listenerCount方法使用说明
2014/12/08 Javascript
详解javascript高级定时器
2015/12/31 Javascript
jquery+json实现动态商品内容展示的方法
2016/01/14 Javascript
JQuery ztree 异步加载实例讲解
2016/02/25 Javascript
JavaScript解析JSON格式数据的方法示例
2017/01/24 Javascript
Angular利用trackBy提升性能的方法
2018/01/26 Javascript
详解Vue项目引入CreateJS的方法(亲测可用)
2019/05/30 Javascript
Vue-axios-post数据后端接不到问题解决
2020/01/09 Javascript
[02:41]DOTA2英雄基础教程 亚巴顿
2014/01/02 DOTA
python八大排序算法速度实例对比
2017/12/06 Python
NumPy 基本切片和索引的具体使用方法
2019/04/24 Python
python子线程退出及线程退出控制的代码
2019/10/16 Python
把vgg-face.mat权重迁移到pytorch模型示例
2019/12/27 Python
Python编程快速上手——Excel到CSV的转换程序案例分析
2020/02/28 Python
树莓派升级python的具体步骤
2020/07/05 Python
驴妈妈旅游网:中国新型的B2C旅游电子商务网站
2016/08/16 全球购物
iHerb香港:维生素、补充剂和天然保健品
2017/08/01 全球购物
Lacoste澳大利亚官网:服装、鞋类及配饰
2018/11/14 全球购物
CAD制图人员的自荐信
2014/02/07 职场文书
班级德育工作实施方案
2014/02/21 职场文书
大学生个人求职信例文
2014/07/07 职场文书
培训感想范文
2015/08/07 职场文书
结婚喜宴迎宾词
2015/08/10 职场文书