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之有容乃大的list(3)
Sep 15 Python
编写简单的Python程序来判断文本的语种
Apr 07 Python
教大家使用Python SqlAlchemy
Feb 12 Python
python Flask 装饰器顺序问题解决
Aug 08 Python
Python实现App自动签到领取积分功能
Sep 29 Python
Python实现的批量修改文件后缀名操作示例
Dec 07 Python
Python3进制之间的转换代码实例
Aug 24 Python
python plt可视化——打印特殊符号和制作图例代码
Apr 17 Python
python实现在内存中读写str和二进制数据代码
Apr 24 Python
Python中使用threading.Event协调线程的运行详解
May 02 Python
Pycharm2020最新激活码|永久激活(附最新激活码和插件的详细教程)
Sep 29 Python
Python爬虫之Selenium实现窗口截图
Dec 04 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中的生成XML文件的4种方法分享
2012/10/06 PHP
php获取$_POST同名参数数组的实现介绍
2013/06/30 PHP
浅析PHP echo 和 print 语句
2020/06/30 PHP
jQuery使用$.ajax进行即时验证的方法
2015/12/08 Javascript
JS+JSP通过img标签调用实现静态页面访问次数统计的方法
2015/12/14 Javascript
javascript实现简单计算器效果【推荐】
2016/04/19 Javascript
JavaScript仿flash遮罩动画效果
2016/06/15 Javascript
node.js学习之交互式解释器REPL详解
2016/12/08 Javascript
JS原生轮播图的简单实现(推荐)
2017/07/22 Javascript
微信小程序实现点击按钮修改文字大小功能【附demo源码下载】
2017/12/06 Javascript
详解JavaScript 中 if / if...else...替换方式
2018/07/15 Javascript
小程序组件之仿微信通讯录的实现代码
2018/09/12 Javascript
《javascript设计模式》学习笔记三:Javascript面向对象程序设计单例模式原理与实现方法分析
2020/04/07 Javascript
JS实现简易贪吃蛇游戏
2020/08/24 Javascript
Python数据分析之真实IP请求Pandas详解
2016/11/18 Python
Python3下错误AttributeError: ‘dict’ object has no attribute’iteritems‘的分析与解决
2017/07/06 Python
pandas求两个表格不相交的集合方法
2018/12/08 Python
让Python脚本暂停执行的几种方法(小结)
2019/07/11 Python
解决Pymongo insert时会自动添加_id的问题
2020/12/05 Python
CSS3中的注音对齐属性ruby-align用法指南
2016/07/01 HTML / CSS
专门出售各种儿童读物的网站:Put Me In The Story
2016/08/07 全球购物
BrandAlley英国:法国折扣奢侈品网上零售商
2017/07/03 全球购物
澳大利亚在线生活方式商店:Mytopia
2018/07/08 全球购物
电气工程和自动化自荐信范文
2013/12/25 职场文书
优秀部门获奖感言
2014/02/14 职场文书
《英英学古诗》教学反思
2014/04/11 职场文书
股权转让协议书
2014/04/12 职场文书
结对共建协议书
2014/08/20 职场文书
党的群众路线教育实践活动个人对照检查材料(教师)
2014/11/04 职场文书
工程部岗位职责
2015/02/10 职场文书
2015年小学数学教师个人工作总结
2015/05/25 职场文书
小学体育组工作总结
2015/08/13 职场文书
运动会广播稿20字
2015/08/19 职场文书
利用js实现简单开关灯代码
2021/11/23 Javascript
「租借女友」第2季樱泽墨角色PV&新视觉图公开
2022/03/21 日漫
GPU服务器的多用户配置方法
2022/07/07 Servers