Python爬虫利用cookie实现模拟登陆实例详解


Posted in Python onJanuary 12, 2017

Cookie,指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。

举个例子,某些网站是需要登录后才能得到你想要的信息的,不登陆只能是游客模式,那么我们可以利用Urllib2库保存我们以前登录过的Cookie,之后载入cookie获取我们想要的页面,然后再进行抓取。理解cookie主要是为我们快捷模拟登录抓取目标网页做出准备。

我之前的帖子中使用过urlopen()这个函数来打开网页进行抓取,这仅仅只是一个简单的Python网页打开器,其参数也仅有urlopen(url,data,timeout),这三个参数对于我们获取目标网页的cookie是远远不够的。这时候我们就要利用到另外一种Opener——CookieJar。

cookielib也是Python进行爬虫的一个重要模块,他能与urllib2相互结合一起爬取想要的内容。该模块的CookieJar类的对象可以捕获cookie并在后续连接请求时重新发送,这样就可以实现我们所需要的模拟登录功能。

这里特别说明一下,cookielib是在py2.7中自带的模块,无需重新安装,想要查看其自带模块可以查看Python目录下的Lib文件夹,里面有所有安装的模块。我一开始没想起来,在pycharm中竟然没有搜到cookielib,使用了快捷安装也报错:Couldn't find index page for 'Cookielib' (maybe misspelled?)

Python爬虫利用cookie实现模拟登陆实例详解

之后才想起来是不是自带的就有,没想到去lib文件夹一看还真有,白白浪费半个小时各种瞎折腾~~

下面我们就来介绍一下这个模块,该模块主要的对象有CookieJar、FileCookieJar、MozillaCookieJar、LWPCookieJar。

它们的关系:CookieJar —-派生—->FileCookieJar —-派生—?>MozillaCookieJar和LWPCookieJar   主要用法,我们下面也会讲到。urllib2.urlopen()函数不支持验证、cookie或者其它HTTP高级功能。要支持这些功能,必须使用build_opener()(可以用于让python程序模拟浏览器进行访问,作用你懂得~)函数创建自定义Opener对象。

1、首先我们就来获取一下网站的cookie

例子:

#coding=utf-8 
import cookielib 
import urllib2 
 
mycookie = cookielib.CookieJar() #声明一个CookieJar的类对象保存cookie(注意CookieJar的大小写问题) 
handler = urllib2.HTTPCookieProcessor(mycookie) #利用urllib2库中的HTTPCookieProcessor来声明一个处理cookie的处理器 
opener = urllib2.build_opener(handler) #利用handler来构造opener,opener的用法和urlopen()类似 
response = opener.open("http://www.baidu.com") #opener返回的一个应答对象response 
for item in my.cookie: 
  print"name="+item.name 
  print"value="+item.value

结果:

name=BAIDUID 
value=73BD718962A6EA0DAD4CB9578A08FDD0:FG=1 
name=BIDUPSID 
value=73BD718962A6EA0DAD4CB9578A08FDD0 
name=H_PS_PSSID 
value=1450_19035_21122_17001_21454_21409_21394_21377_21526_21189_21398 
name=PSTM 
value=1478834132 
name=BDSVRTM 
value=0 
name=BD_HOME 
value=0

这样我们就得到了一个最简单的cookie。

2、将cookie保存到文件

上面我们得到了cookie,下面我们学习如何保存cookie。在这里我们使用它的子类MozillaCookieJar来实现Cookie的保存

例子:

#coding=utf-8 
import cookielib 
import urllib2 
 
mycookie = cookielib.MozillaCookieJar() #声明一个MozillaCookieJar的类对象保存cookie(注意MozillaCookieJar的大小写问题) 
handler = urllib2.HTTPCookieProcessor(mycookie) #利用urllib2库中的HTTPCookieProcessor来声明一个处理cookie的处理器 
opener = urllib2.build_opener(handler) #利用handler来构造opener,opener的用法和urlopen()类似 
response = opener.open("http://www.baidu.com") #opener返回的一个应答对象response 
for item in mycookie: 
  print"name="+item.name 
  print"value="+item.value 
filename='mycookie.txt'#设定保存的文件名 
mycookie.save(filename,ignore_discard=True, ignore_expires=True)

将上面的例子简单变形就可以得到本例,使用了CookieJar的子类MozillaCookiJar,为什么呢?我们将MozillaCookiJar换成CookieJar试试,下面一张图你就能明白:

Python爬虫利用cookie实现模拟登陆实例详解

  CookieJar是没有保存save属性的~

  save()这个方法中:ignore_discard的意思是即使cookies将被丢弃也将它保存下来,ignore_expires的意思是如果在该文件中cookies已经存在,则覆盖原文件写入,在这里,我们将这两个全部设置为True。运行之后,cookies将被保存到cookie.txt文件中,我们查看一下内容:

Python爬虫利用cookie实现模拟登陆实例详解

这样我们就成功保存了我们想要的cookie

3、从文件中获取cookie并访问

<pre style="background-color: rgb(255, 255, 255); font-family: 宋体; font-size: 9pt;"><pre name="code" class="python">#coding=utf-8 
import urllib2 
import cookielib 
import urllib 
 
#第一步先给出账户密码网址准备模拟登录 
postdata = urllib.urlencode({ 
  'stuid': '1605122162', 
  'pwd': 'xxxxxxxxx'#密码这里就不泄漏啦,嘿嘿嘿 
}) 
loginUrl = 'http://ids.xidian.edu.cn/authserver/login?service=http%3A%2F%2Fjwxt.xidian.edu.cn%2Fcaslogin.jsp'# 登录教务系统的URL,成绩查询网址 
 
# 第二步模拟登陆并保存登录的cookie 
filename = 'cookie.txt'  #创建文本保存cookie 
mycookie = cookielib.MozillaCookieJar(filename) # 声明一个MozillaCookieJar对象实例来保存cookie,之后写入文件 
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(mycookie)) #定义这个opener,对象是cookie 
result = opener.open(loginUrl, postdata) 
mycookie.save(ignore_discard=True, ignore_expires=True)# 保存cookie到cookie.txt中 
 
# 第三步利用cookie请求访问另一个网址,教务系统总址 
gradeUrl = 'http://ids.xidian.edu.cn/authserver/login?service'  #只要是帐号密码一样的网址就可以, 请求访问成绩查询网址 
result = opener.open(gradeUrl) 
print result.read()</pre><br> 
<pre></pre> 
<pre></pre> 
<p></p> 
<pre></pre> 
<pre></pre> 
创建一个带有cookie的opener,在访问登录的URL时,将登录后的cookie保存下来,然后利用这个cookie来访问其他网址。 
<p></p> 
<p><br> 
</p> 
<p>核心思想:创建opener,包含了cookie的内容。之后在利用opener时,就会自动使用原先保存的cookie.<br> 
<br> 
</p> 
   
</pre>

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Python 相关文章推荐
Python列表推导式的使用方法
Nov 21 Python
在Python中使用SimpleParse模块进行解析的教程
Apr 11 Python
linux下python抓屏实现方法
May 22 Python
python图像处理之反色实现方法
May 30 Python
Python实现的简单hangman游戏实例
Jun 28 Python
Python 专题三 字符串的基础知识
Mar 19 Python
Python递归实现汉诺塔算法示例
Mar 19 Python
python按行读取文件,去掉每行的换行符\n的实例
Apr 19 Python
python编写暴力破解zip文档程序的实例讲解
Apr 24 Python
Python input函数使用实例解析
Nov 22 Python
python爬虫判断招聘信息是否存在的实例代码
Nov 20 Python
pycharm激活码免费分享适用最新pycharm2020.2.3永久激活
Nov 25 Python
Python 出现错误TypeError: ‘NoneType’ object is not iterable解决办法
Jan 12 #Python
python获取当前用户的主目录路径方法(推荐)
Jan 12 #Python
Python获取文件所在目录和文件名的方法
Jan 12 #Python
深入理解Python中变量赋值的问题
Jan 12 #Python
Python时间获取及转换知识汇总
Jan 11 #Python
json跨域调用python的方法详解
Jan 11 #Python
Python中遇到的小问题及解决方法汇总
Jan 11 #Python
You might like
PHP的类 功能齐全的发送邮件类
2006/10/09 PHP
fleaphp rolesNameField bug解决方法
2011/04/23 PHP
使用PHP实现二分查找算法代码分享
2011/06/24 PHP
学习php开源项目的源码指南
2014/12/21 PHP
PHP中实现Bloom Filter算法
2015/03/30 PHP
PHP微信H5支付开发实例
2018/07/25 PHP
phpQuery采集网页实现代码实例
2020/04/02 PHP
jQuery创建平滑的页面滚动(顶部或底部)
2013/02/26 Javascript
js代码实现的加入收藏效果并兼容主流浏览器
2014/06/23 Javascript
JavaScript实现按Ctrl键打开新页面
2014/09/04 Javascript
生成二维码方法汇总
2014/12/26 Javascript
分享2个jQuery插件--jquery.fileupload与artdialog
2014/12/26 Javascript
javascript实现很浪漫的气泡冒出特效
2020/09/05 Javascript
使用vue构建移动应用实战代码
2017/08/02 Javascript
js解决软键盘遮挡输入框的问题分享
2017/12/19 Javascript
基于Vue自定义指令实现按钮级权限控制思路详解
2018/05/23 Javascript
vue+eslint+vscode配置教程
2019/08/09 Javascript
mui js控制开关状态、修改switch开关的值方法
2019/09/03 Javascript
详解vue3.0 的 Composition API 的一种使用方法
2020/10/26 Javascript
Vue实现简单购物车功能
2020/12/13 Vue.js
[07:09]2014DOTA2国际邀请赛-Newbee再次发威成功晋级决赛
2014/07/19 DOTA
[37:23]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#2Secret VS EG第二局
2016/03/04 DOTA
Python中用startswith()函数判断字符串开头的教程
2015/04/07 Python
python3读取excel文件只提取某些行某些列的值方法
2018/07/10 Python
Python 获取ftp服务器文件时间的方法
2019/07/02 Python
使用Python进行防病毒免杀解析
2019/12/13 Python
python中对二维列表中一维列表的调用方法
2020/06/07 Python
eBay德国站:eBay.de
2017/09/14 全球购物
NBA欧洲商店(英国):NBA Europe Store UK
2018/07/27 全球购物
Lookfantastic俄罗斯:欧洲在线化妆品零售商
2019/08/06 全球购物
九年级科学教学反思
2014/01/29 职场文书
青春无悔演讲稿
2014/05/08 职场文书
单位绩效考核方案
2014/05/11 职场文书
护士自荐信范文(2016推荐篇)
2016/01/28 职场文书
python 爬取哔哩哔哩up主信息和投稿视频
2021/06/07 Python
Java Spring Boot 正确读取配置文件中的属性的值
2022/04/20 Java/Android