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 快速排序代码
Nov 23 Python
说一说Python logging
Apr 15 Python
Python的爬虫程序编写框架Scrapy入门学习教程
Jul 02 Python
python3 模拟登录v2ex实例讲解
Jul 13 Python
Python根据已知邻接矩阵绘制无向图操作示例
Jun 23 Python
tensorflow 用矩阵运算替换for循环 用tf.tile而不写for的方法
Jul 27 Python
Falsk 与 Django 过滤器的使用与区别详解
Jun 04 Python
python 魔法函数实例及解析
Sep 25 Python
Pytorch之view及view_as使用详解
Dec 31 Python
python标识符命名规范原理解析
Jan 10 Python
pandas创建DataFrame的7种方法小结
Jun 14 Python
解决Keras的自定义lambda层去reshape张量时model保存出错问题
Jul 01 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 动态多文件上传
2009/01/18 PHP
php中模拟POST传递数据的两种方法分享
2011/09/16 PHP
请离开include_once和require_once
2013/07/18 PHP
PHP中数据类型转换的三种方式
2015/04/02 PHP
微信支付PHP SDK ―― 公众号支付代码详解
2016/09/13 PHP
PHP实现随机生成水印图片功能
2017/03/22 PHP
Prototype 学习 工具函数学习($w,$F方法)
2009/07/12 Javascript
常用的JavaScript验证正则表达式汇总
2013/11/26 Javascript
JavaScript中的闭包介绍
2015/03/15 Javascript
jquery.form.js实现将form提交转为ajax方式提交的方法
2015/04/07 Javascript
javascript如何写热点图
2015/12/08 Javascript
AngularJS中如何使用$http对MongoLab数据表进行增删改查
2016/01/23 Javascript
JS使用cookie设置样式的方法
2016/06/30 Javascript
AngularJS中的表单简单入门
2016/07/28 Javascript
基于JS实现发送短信验证码后的倒计时功能(无视页面刷新,页面关闭不进行倒计时功能)
2016/09/02 Javascript
基于ajax与msmq技术的消息推送功能实现代码
2016/12/26 Javascript
微信小程序实现带参数的分享功能(两种方法)
2019/05/17 Javascript
推荐几个不错的console调试技巧实现
2019/12/20 Javascript
Python中条件选择和循环语句使用方法介绍
2013/03/13 Python
python中的实例方法、静态方法、类方法、类变量和实例变量浅析
2014/04/26 Python
python数据结构之链表的实例讲解
2017/07/25 Python
python实现闹钟定时播放音乐功能
2018/01/25 Python
python 追踪except信息方式
2020/04/25 Python
Python 通过正则表达式快速获取电影的下载地址
2020/08/17 Python
纯CSS3实现绘制各种图形实现代码详细整理
2012/12/26 HTML / CSS
机械个人求职信范文
2014/01/24 职场文书
加入学生会演讲稿
2014/04/24 职场文书
机关门卫的岗位职责
2014/04/29 职场文书
超市商业计划书
2014/05/04 职场文书
体育节口号
2014/06/19 职场文书
民警个人对照检查剖析材料
2014/09/17 职场文书
2014年发展党员工作总结
2014/11/12 职场文书
不同意离婚答辩状
2015/05/22 职场文书
交通事故被告答辩状
2015/05/22 职场文书
解决golang结构体tag编译错误的问题
2021/05/02 Golang
漫画「你在春天醒来」第10卷封面公开
2022/03/21 日漫