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 相关文章推荐
本地文件上传到七牛云服务器示例(七牛云存储)
Jan 11 Python
使用python编写脚本获取手机当前应用apk的信息
Jul 21 Python
python端口扫描系统实现方法
Nov 19 Python
Python列表计数及插入实例
Dec 17 Python
详解python 字符串和日期之间转换 StringAndDate
May 04 Python
Python实现的快速排序算法详解
Aug 01 Python
浅谈numpy生成数组的零值问题
Nov 12 Python
python爬虫获取百度首页内容教学
Dec 23 Python
python 多线程对post请求服务器测试并发的方法
Jun 13 Python
python可迭代对象去重实例
May 15 Python
keras 自定义loss损失函数,sample在loss上的加权和metric详解
May 23 Python
学习Python需要哪些工具
Sep 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边学边教》(04.编写简易的通讯录――视频教程1)
2006/12/13 PHP
win7+apache+php+mysql环境配置操作详解
2013/06/10 PHP
php使用date和strtotime函数输出指定日期的方法
2014/11/14 PHP
PHP回溯法解决0-1背包问题实例分析
2015/03/23 PHP
PHP实现获取ip地址的5种方法,以及插入用户登录日志操作示例
2019/02/28 PHP
基于jQuery的树控件实现代码(asp.net+json)
2010/07/11 Javascript
Javascript倒计时代码
2010/08/12 Javascript
JQuery 选择器、过滤器介绍
2011/02/14 Javascript
实现变速回到顶部的JavaScript代码
2011/05/09 Javascript
JS for循环中i++ 和 ++i的区别介绍
2016/07/20 Javascript
js 实现一些跨浏览器的事件方法详解及实例
2016/10/27 Javascript
详解Jquery Easyui的验证扩展
2017/01/09 Javascript
jQuery中DOM节点的删除方法总结(超全面)
2017/01/22 Javascript
JS实现评价的星星功能
2017/08/20 Javascript
详解JavaScript函数callee、call、apply的区别
2019/03/08 Javascript
vue中input的v-model清空操作
2019/09/06 Javascript
js实现带有动画的返回顶部
2020/08/09 Javascript
vue 解决provide和inject响应的问题
2020/11/12 Javascript
[36:54]Mineski vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python定时采集摄像头图像上传ftp服务器功能实现
2013/12/23 Python
python3 判断列表是一个空列表的方法
2018/05/04 Python
Python模拟自动存取款机的查询、存取款、修改密码等操作
2018/09/02 Python
Python3网络爬虫中的requests高级用法详解
2019/06/18 Python
python3将变量输入的简单实例
2020/08/19 Python
Python基于内置函数type创建新类型
2020/10/22 Python
CSS3新属性transition-property transform box-shadow实例学习
2013/06/06 HTML / CSS
HTML5拖拽API经典实例详解
2018/04/20 HTML / CSS
JYSK加拿大:购买家具、床垫、家居装饰等
2020/02/14 全球购物
一套中级Java程序员笔试题
2015/01/14 面试题
捐款倡议书格式范文
2014/05/14 职场文书
采购部长岗位职责
2014/06/13 职场文书
2015大学自主招生自荐信范文
2015/03/04 职场文书
幼师求职自荐信
2015/03/26 职场文书
拥有这5个特征人,“命”都不会太差
2019/08/16 职场文书
用Python进行栅格数据的分区统计和批量提取
2021/05/27 Python
Nginx安装配置详解
2022/06/25 Servers