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文件夹与文件的操作实现代码
Jul 13 Python
python变量不能以数字打头详解
Jul 06 Python
python之virtualenv的简单使用方法(必看篇)
Nov 25 Python
Python装饰器(decorator)定义与用法详解
Feb 09 Python
Python3非对称加密算法RSA实例详解
Dec 06 Python
PyQt5实现类似别踩白块游戏
Jan 24 Python
Python格式化字符串f-string概览(小结)
Jun 18 Python
解决Python3 抓取微信账单信息问题
Jul 19 Python
对python中的float除法和整除法的实例详解
Jul 20 Python
如何基于python实现归一化处理
Jan 20 Python
Python实现简单的猜单词
Jun 15 Python
python数字图像处理实现图像的形变与缩放
Jun 28 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
神族 Protoss 剧情介绍
2020/03/14 星际争霸
php Smarty模板生成html文档的方法
2010/04/12 PHP
PHP中几种常见的超时处理全面总结
2012/09/11 PHP
浅析php单例模式
2014/11/25 PHP
javascript数组与php数组的地址传递及值传递用法实例
2015/01/22 PHP
PHP 图片合成、仿微信群头像的方法示例
2019/10/25 PHP
使用prototype.js 的时候应该特别注意的几个问题.
2007/04/12 Javascript
JS小框架 fly javascript framework
2009/11/26 Javascript
Jquery实现自定义弹窗示例
2014/03/12 Javascript
JavaScript实现文字与图片拖拽效果的方法
2015/02/16 Javascript
Bootstrap和Angularjs配合自制弹框的实例代码
2016/08/24 Javascript
JS实现页面打印功能
2017/03/16 Javascript
Vue中computed与methods的区别详解
2018/03/24 Javascript
vue-quill-editor+plupload富文本编辑器实例详解
2018/10/19 Javascript
vue+express+jwt持久化登录的方法
2019/06/14 Javascript
JavaScript提升机制Hoisting详解
2019/10/23 Javascript
prettier自动格式化去换行的实现代码
2020/08/25 Javascript
Vue插槽_特殊特性slot,slot-scope与指令v-slot说明
2020/09/04 Javascript
python中精确输出JSON浮点数的方法
2014/04/18 Python
python Selenium爬取内容并存储至MySQL数据库的实现代码
2017/03/16 Python
Python中Django 后台自定义表单控件
2017/03/28 Python
Python爬虫番外篇之Cookie和Session详解
2017/12/27 Python
Pandas 对Dataframe结构排序的实现方法
2018/04/10 Python
Python中输入和输出(打印)数据实例方法
2019/10/13 Python
Python 基于jwt实现认证机制流程解析
2020/06/22 Python
使用CSS3实现一个3D相册效果实例
2016/12/03 HTML / CSS
欧洲第一中国智能手机和平板电脑网上商店:CECT-SHOP
2018/01/08 全球购物
柏林通行证:Berlin Pass
2018/04/11 全球购物
Hanky Panky官方网站:内衣和睡衣
2019/07/25 全球购物
荷兰家电销售网站:Welhof
2020/12/08 全球购物
完美实现CSS垂直居中的11种方法
2021/03/27 HTML / CSS
学校党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
2014年银行客户经理工作总结
2014/11/12 职场文书
英文自荐信范文
2015/03/25 职场文书
校园之声广播稿
2015/08/18 职场文书
画错魏国疆域啦!《派对咖孔明》动画因作画失误于官网致歉
2022/04/07 日漫