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 30 Python
初步剖析C语言编程中的结构体
Jan 16 Python
python开发简易版在线音乐播放器
Mar 03 Python
python的numpy模块安装不成功简单解决方法总结
Dec 23 Python
python3 对list中每个元素进行处理的方法
Jun 29 Python
如何使用Python实现斐波那契数列
Jul 02 Python
在Django下创建项目以及设置settings.py教程
Dec 03 Python
Python退出时强制运行一段代码的实现方法
Apr 29 Python
selenium切换标签页解决get超时问题的完整代码
Aug 30 Python
Python离线安装各种库及pip的方法
Nov 28 Python
浅谈Python基础之列表那些事儿
May 11 Python
Python图片检索之以图搜图
May 31 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中常用的预定义变量小结
2012/05/09 PHP
Thinkphp中数据按分类嵌套循环实现方法
2014/10/30 PHP
PHP实现链表的定义与反转功能示例
2018/06/09 PHP
用js得到网页中所有的div的id
2020/10/19 Javascript
jQuery源码分析-04 选择器-Sizzle-工作原理分析
2011/11/14 Javascript
js实现运动logo图片效果及运动元素对象sportBox使用方法
2012/12/25 Javascript
document.getElementBy(&quot;id&quot;)与$(&quot;#id&quot;)有什么区别
2013/09/22 Javascript
利用原生JavaScript获取元素样式只是获取而已
2014/10/08 Javascript
JS实现仿Windows经典风格的选项卡Tab切换代码
2015/10/20 Javascript
jQuery实现的简单拖拽功能示例
2016/09/13 Javascript
玩转NODE.JS(四)-搭建简单的聊天室的代码
2016/11/11 Javascript
原生js和css实现图片轮播效果
2017/02/07 Javascript
很棒的vue弹窗组件
2017/05/24 Javascript
js判断用户是输入的地址请求的路径(实例讲解)
2017/07/18 Javascript
微信小程序商品详情页规格属性选择示例代码
2017/10/30 Javascript
Python中的两个内置模块介绍
2015/04/05 Python
在Django框架中编写Contact表单的教程
2015/07/17 Python
pandas DataFrame 根据多列的值做判断,生成新的列值实例
2018/05/18 Python
python消除序列的重复值并保持顺序不变的实例
2018/11/08 Python
连接pandas以及数组转pandas的方法
2019/06/28 Python
flask应用部署到服务器的方法
2019/07/12 Python
解决Tensorflow 使用时cpu编译不支持警告的问题
2020/02/03 Python
Django中的session用法详解
2020/03/09 Python
Python预测2020高考分数和录取情况
2020/07/08 Python
python中pyplot基础图标函数整理
2020/11/10 Python
如何在Canvas上的图形/图像绑定事件监听的实现
2020/09/16 HTML / CSS
高档奢华时装在线目的地:FORWARD by elyse walker
2017/10/16 全球购物
高二化学教学反思
2014/01/30 职场文书
珍珠鸟教学反思
2014/02/01 职场文书
中学生励志演讲稿
2014/04/26 职场文书
趣味运动会策划方案
2014/06/02 职场文书
大学生国家助学金感谢信
2015/01/23 职场文书
信用卡工作证明范本
2015/06/19 职场文书
美容院管理规章制度
2015/08/05 职场文书
趣味运动会口号
2015/12/24 职场文书
Python代码风格与编程习惯重要吗?
2021/06/03 Python