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实现逆波兰计算表达式实例详解
May 06 Python
举例讲解如何在Python编程中进行迭代和遍历
Jan 19 Python
python实现图书管理系统
Mar 12 Python
django 自定义过滤器的实现
Feb 26 Python
Django 拆分model和view的实现方法
Aug 16 Python
Python 最强编辑器详细使用指南(PyCharm )
Sep 16 Python
Python 解码Base64 得到码流格式文本实例
Jan 09 Python
Python在终端通过pip安装好包以后在Pycharm中依然无法使用的问题(三种解决方案)
Mar 10 Python
Python 3.8 新功能来一波(大部分人都不知道)
Mar 11 Python
python 使用cx-freeze打包程序的实现
Mar 14 Python
在Sublime Editor中配置Python环境的详细教程
May 03 Python
Anaconda使用IDLE的实现示例
Sep 23 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 simple_html_dom.php+正则 采集文章代码
2009/12/24 PHP
PHP为表单获取的URL 地址预设 http 字符串函数代码
2010/05/26 PHP
7个超级实用的PHP代码片段
2011/07/11 PHP
基于MySQL体系结构的分析
2013/05/02 PHP
PHP带节点操作的无限分类实现方法详解
2016/11/09 PHP
ThinkPHP框架表单验证操作方法
2017/07/19 PHP
yii2.0整合阿里云oss的示例代码
2017/09/19 PHP
PHP获取访问设备信息的方法示例
2019/02/20 PHP
js Flash插入函数免激活代码
2009/03/31 Javascript
JQuery之拖拽插件实现代码
2011/04/14 Javascript
jQuery-ui引入后Vs2008的无智能提示问题解决方法
2014/02/10 Javascript
js实现绿白相间竖向网页百叶窗动画切换效果
2015/03/02 Javascript
javascript异步处理工作机制详解
2015/04/13 Javascript
jQuery Mobile操作HTML5的常用函数总结
2016/05/17 Javascript
javascript 动态脚本添加的简单方法
2016/10/11 Javascript
JS如何生成一个不重复的ID的函数
2016/12/25 Javascript
Es6 Generator函数详细解析
2018/02/24 Javascript
vue.js 底部导航栏 一级路由显示 子路由不显示的解决方法
2018/03/09 Javascript
Vue Router的懒加载路径的解决方法
2018/06/21 Javascript
ng-alain表单使用方式详解
2018/07/10 Javascript
在 Angular6 中使用 HTTP 请求服务端数据的步骤详解
2018/08/06 Javascript
vue环形进度条组件实例应用
2018/10/10 Javascript
JS实现点击生成UUID的方法完整实例【基于jQuery】
2019/06/12 jQuery
微信小程序实现手势滑动效果
2019/08/26 Javascript
详解webpack的文件监听实现(热更新)
2020/09/11 Javascript
[14:24]Optic Gaming vs PSG LGD BO3
2018/06/07 DOTA
Python采用Django制作简易的知乎日报API
2016/08/03 Python
python使用fork实现守护进程的方法
2017/11/16 Python
python爬虫获取新浪新闻教学
2018/12/23 Python
关于Python作用域自学总结
2019/06/10 Python
深入了解如何基于Python读写Kafka
2019/12/31 Python
基于Python爬取51cto博客页面信息过程解析
2020/08/25 Python
英国最大的女性服装零售商:Dorothy Perkins
2017/03/30 全球购物
应征英语教师求职信
2013/11/27 职场文书
关于教师节的广播稿
2015/08/19 职场文书
2016教师廉洁教育心得体会
2016/01/13 职场文书