热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

这篇文章主要介绍了Python爬虫利用cookie实现模拟登陆实例详解的相关资料,需要的朋友可以参考下

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?)


之后才想起来是不是自带的就有,没想到去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试试,下面一张图你就能明白:


  COOKIEJar是没有保存save属性的~

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


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

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

#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()

 
 

 
 
创建一个带有COOKIE的opener,在访问登录的URL时,将登录后的COOKIE保存下来,然后利用这个COOKIE来访问其他网址。 


核心思想:创建opener,包含了COOKIE的内容。之后在利用opener时,就会自动使用原先保存的COOKIE.

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


推荐阅读
  • 【爬虫训练场】:分页爬虫案例设计Demo,Python Flask与MySQL的完美连接
    网站类应用,一定离不开MySQL,所以本案例将带着大家学习一下,通过Flask调用MySQL数据,并实现分页呈现。类被称作蓝图,它是一个存储操作方法的容器,Flask可以通过Blu ... [详细]
  • 本人学习笔记,知识点均摘自于网络,用于学习和交流(如未注明出处,请提醒,将及时更正,谢谢)OS:我学习是为了上 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 本文介绍了使用Python根据字典中的值进行排序的方法,并给出了实验结果。通过将字典转化为记录项,可以按照字典中的值进行排序操作。实验结果显示,按照值进行排序后的记录项为[('b', 2), ('a', 3)]。 ... [详细]
  • 使用正则表达式爬取36Kr网站首页新闻的操作步骤和代码示例
    本文介绍了使用正则表达式来爬取36Kr网站首页所有新闻的操作步骤和代码示例。通过访问网站、查找关键词、编写代码等步骤,可以获取到网站首页的新闻数据。代码示例使用Python编写,并使用正则表达式来提取所需的数据。详细的操作步骤和代码示例可以参考本文内容。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • Python爬虫中使用正则表达式的方法和注意事项
    本文介绍了在Python爬虫中使用正则表达式的方法和注意事项。首先解释了爬虫的四个主要步骤,并强调了正则表达式在数据处理中的重要性。然后详细介绍了正则表达式的概念和用法,包括检索、替换和过滤文本的功能。同时提到了re模块是Python内置的用于处理正则表达式的模块,并给出了使用正则表达式时需要注意的特殊字符转义和原始字符串的用法。通过本文的学习,读者可以掌握在Python爬虫中使用正则表达式的技巧和方法。 ... [详细]
  • 2022年的风口:你看不起的行业,真的很挣钱!
    本文介绍了2022年的风口,探讨了一份稳定的副业收入对于普通人增加收入的重要性,以及如何抓住风口来实现赚钱的目标。文章指出,拼命工作并不一定能让人有钱,而是需要顺应时代的方向。 ... [详细]
  • Python开源库和第三方包的常用框架及库
    本文介绍了Python开源库和第三方包中常用的框架和库,包括Django、CubicWeb等。同时还整理了GitHub中最受欢迎的15个Python开源框架,涵盖了事件I/O、OLAP、Web开发、高性能网络通信、测试和爬虫等领域。 ... [详细]
  • 本文介绍了在Python中使用getpass模块隐藏密码输入的方法,以保护用户的密码不被其他人员看到。同时还提到了在PyCharm中运行该命令无效的问题,需要在terminal中运行。 ... [详细]
  • VS Code远程调试Python程序的问题及解决方法
    本文记录了使用VS Code远程调试Python程序时遇到的问题,以及解决方法。作者发现在Python版本小于等于3.6时无法调试,经过查找官方说明得知必须大于等于3.7版本。此外,作者还提到了关闭VS Code插件的自动更新以及回退Python插件版本的方法。如果您有类似问题,请在留言区留言。 ... [详细]
  • 开发笔记:Python之路第一篇:初识Python
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Python之路第一篇:初识Python相关的知识,希望对你有一定的参考价值。Python简介& ... [详细]
  • 求职屡屡碰壁,埋头苦学5个月斩获16000元offer,终于懂了没有人能随随便便成功
    求职屡屡碰壁,埋头苦学5个月斩获16000元offer,终于懂了没有人能随随便便成功-我以前一直认为,只要有耐心,有决心,有信心,就可以在社会上立足,干出一番事业。但是经历了社会的 ... [详细]
  • Python入门后,想要从事自由职业可以做哪方面工作?1.爬虫很多人入门Python的必修课之一就是web开发和爬虫。但是这两项想要赚钱的话 ... [详细]
  • 零基础用Python打造Android字符串资源翻译器(五):增加图形化界面
    目录 ... [详细]
author-avatar
最傻的傻瓜z1998
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有