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实现apahce网站日志分析示例
Apr 02 Python
python生成验证码图片代码分享
Jan 28 Python
python读出当前时间精度到秒的代码
Jul 05 Python
浅谈pytorch卷积核大小的设置对全连接神经元的影响
Jan 10 Python
在PyCharm中实现添加快捷模块
Feb 12 Python
Python接口测试结果集实现封装比较
May 01 Python
Python包和模块的分发详细介绍
Jun 19 Python
详解Python的爬虫框架 Scrapy
Aug 03 Python
通过代码实例了解Python异常本质
Sep 16 Python
django跳转页面传参的实现
Sep 17 Python
Python读取多列数据以及用matplotlib制作图表方法实例
Sep 23 Python
Python开发五子棋小游戏
May 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
配置Apache2.2+PHP5+CakePHP1.2+MySQL5运行环境
2009/04/25 PHP
php获取远程图片体积大小的实例
2013/11/12 PHP
利用NodeJS的子进程(child_process)调用系统命令的方法分享
2013/06/05 NodeJs
jQuery动画效果-slideUp slideDown上下滑动示例代码
2013/08/28 Javascript
分享两个手机访问pc网站自动跳转手机端网站代码
2020/12/24 Javascript
JS实现点击上移下移LI行数据的方法
2015/08/05 Javascript
javascript实现起伏的水波背景效果
2016/05/16 Javascript
利用浮层使select不可选的实现方法
2016/12/03 Javascript
Vue获取DOM元素样式和样式更改示例
2017/03/07 Javascript
ES6教程之for循环和Map,Set用法分析
2017/04/10 Javascript
Angular模板表单校验方法详解
2017/08/11 Javascript
浅谈webpack下的AOP式无侵入注入
2017/11/12 Javascript
JavaScript使用math.js进行精确计算操作示例
2018/06/19 Javascript
解决vue同一slot在组件中渲染多次的问题
2018/09/06 Javascript
vue实现列表滚动的过渡动画
2020/06/29 Javascript
解决vue字符串换行问题(绝对管用)
2020/08/06 Javascript
vue离开当前页面触发的函数代码
2020/09/01 Javascript
详解Python3.1版本带来的核心变化
2015/04/07 Python
Python中tell()方法的使用详解
2015/05/24 Python
Python 模拟登陆的两种实现方法
2017/08/10 Python
基于python select.select模块通信的实例讲解
2017/09/21 Python
pyhton列表转换为数组的实例
2018/04/04 Python
对python使用http、https代理的实例讲解
2018/05/07 Python
使用python语言,比较两个字符串是否相同的实例
2018/06/29 Python
pymysql 开启调试模式的实现
2019/09/24 Python
详解Python多线程下的list
2020/07/03 Python
Python3中小括号()、中括号[]、花括号{}的区别详解
2020/11/15 Python
Selenium 安装和简单使用的实现
2020/12/04 Python
Python扫描端口的实现
2021/01/25 Python
Scholastic父母商店:儿童书籍
2017/01/01 全球购物
六十大寿答谢词
2014/01/12 职场文书
2014年开学第一课活动方案
2014/03/06 职场文书
工程建设实施方案
2014/03/14 职场文书
单位介绍信格式范文
2015/05/04 职场文书
党校团干班培训心得体会
2016/01/06 职场文书
mysql查询的控制语句图文详解
2021/04/11 MySQL