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之一个免费的实验室
Sep 14 Python
Python简单生成8位随机密码的方法
May 24 Python
python 调用c语言函数的方法
Sep 29 Python
Python Flask框架模板操作实例分析
May 03 Python
对python 中re.sub,replace(),strip()的区别详解
Jul 22 Python
详解python中的模块及包导入
Aug 30 Python
Django实现将views.py中的数据传递到前端html页面,并展示
Mar 16 Python
用Python在Excel里画出蒙娜丽莎的方法示例
Apr 28 Python
python中怎么表示空值
Jun 19 Python
浅析NumPy 切片和索引
Sep 02 Python
python解包用法详解
Feb 17 Python
Python读取文件夹下的所有文件实例代码
Apr 02 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获取$_POST同名参数数组的实现介绍
2013/06/30 PHP
PHP使用Session遇到的一个Permission denied Notice解决办法
2014/07/30 PHP
php读取csc文件并输出
2015/05/21 PHP
PHP利用imagick生成组合缩略图
2016/02/19 PHP
Thinkphp5.0 框架的请求方式与响应方式分析
2019/10/14 PHP
Javascript中定义方法的另类写法(批量定义js对象的方法)
2011/02/25 Javascript
jQuery控制的不同方向的滑动(向左、向右滑动等)
2014/07/18 Javascript
jquery中filter方法用法实例分析
2015/02/06 Javascript
浅谈DOCTYPE对$(window).height()取值的影响
2016/07/21 Javascript
Vue开发过程中遇到的疑惑知识点总结
2017/01/20 Javascript
vue调用高德地图实例代码
2017/04/28 Javascript
关于Vue Webpack2单元测试示例详解
2017/08/14 Javascript
NodeJs搭建本地服务器之使用手机访问的实例讲解
2018/05/12 NodeJs
浅谈Node.js 中间件模式
2018/06/12 Javascript
webpack4.x下babel的安装、配置及使用详解
2019/03/07 Javascript
vue实现固定位置显示功能
2019/05/30 Javascript
python中list常用操作实例详解
2015/06/03 Python
分享Python文本生成二维码实例
2016/01/06 Python
python 把文件中的每一行以数组的元素放入数组中的方法
2018/04/29 Python
python GUI库图形界面开发之PyQt5布局控件QGridLayout详细使用方法与实例
2020/03/06 Python
Anaconda的安装及其环境变量的配置详解
2020/04/22 Python
浅析Python 中的 WSGI 接口和 WSGI 服务的运行
2020/12/09 Python
CSS3 开发工具收集
2010/04/17 HTML / CSS
德国价格合理的品牌商品购物网站:averdo
2019/03/21 全球购物
Hawes & Curtis官网:英国经典品牌
2019/07/27 全球购物
最新大学生创业计划书写作攻略
2014/04/02 职场文书
领导班子四风对照检查材料
2014/09/23 职场文书
乡党委干部党的群众路线教育实践活动个人对照检查材料思想汇报
2014/10/01 职场文书
成本会计实训报告
2014/11/05 职场文书
春季运动会开幕词
2015/01/28 职场文书
施工员岗位职责
2015/02/10 职场文书
聚会通知怎么写
2015/04/23 职场文书
2016圣诞节贺卡寄语
2015/12/07 职场文书
2019新员工心得体会
2019/06/25 职场文书
创业计划书之零食店(进口)
2019/09/24 职场文书
Vue Element UI自定义描述列表组件
2021/05/18 Vue.js