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

比如说有些网站需要登录后才能访问某个页面,在登录之前,你想抓取某个页面内容是不允许的。那么我们可以利用Urllib2库保存我们登录的Cookie,然后再抓取其他页面就达到目的了。

1.Opener

  当你获取一个URL你使用一个opener(一个urllib2.OpenerDirector的实例)。在前面,我们都是使用的默认的opener,也就是urlopen。它是一个特殊的opener,可以理解成opener的一个特殊实例,传入的参数仅仅是url,data,timeout。

  如果我们需要用到Cookie,只用这个opener是不能达到目的的,所以我们需要创建更一般的opener来实现对Cookie的设置。

2.Cookielib

  cookielib模块的主要作用是提供可存储cookie的对象,以便于与urllib2模块配合使用来访问Internet资源。Cookielib模块非常强大,我们可以利用本模块的CookieJar类的对象来捕获cookie并在后续连接请求时重新发送,比如可以实现模拟登录功能。该模块主要的对象有CookieJar、FileCookieJar、MozillaCookieJar、LWPCookieJar。

  它们的关系:CookieJar —-派生—->FileCookieJar  —-派生—–>MozillaCookieJar和LWPCookieJar

1)获取Cookie保存到变量

  首先,我们先利用CookieJar对象实现获取cookie的功能,存储到变量中,先来感受一下

#-*- coding: UTF-8 -*-
import urllib2
import cookielib
#声明一个CookieJar对象实例来保存cookie
cookie = cookielib.CookieJar()
#利用urllib2库的HTTPCookieProcessor对象来创建cookie处理器
handler=urllib2.HTTPCookieProcessor(cookie)
#通过handler来构建opener
opener = urllib2.build_opener(handler)
#此处的open方法同urllib2的urlopen方法,也可以传入request
response = opener.open('http://www.baidu.com')
for item in cookie:print 'Name = '+item.nameprint 'Value = '+item.value

  我们使用以上方法将cookie保存到变量中,然后打印出了cookie中的值,运行结果如下

Name = BIDUPSID
Value = C364562090A29F04F270296E09787130
Name = H_PS_PSSID
Value = 1429_21085_25177_25083
Name = PSTM
Value = 1511943728
Name = BDSVRTM
Value = 0
Name = BD_HOME
Value = 0

2)保存Cookie到文件

  在上面的方法中,我们将cookie保存到了cookie这个变量中,如果我们想将cookie保存到文件中该怎么做呢?这时,我们就要用到FileCookieJar这个对象了,在这里我们使用它的子类MozillaCookieJar来实现Cookie的保存

#-*- coding: UTF-8 -*-
import cookielib
import urllib2# 设置保存cookie的文件,同级目录下的cookie.txt
filename = 'cookie.txt'
# 声明一个MozillaCookieJar对象实例来保存cookie,之后写入文件
cookie = cookielib.MozillaCookieJar(filename)
# 利用urllib2库的HTTPCookieProcessor对象来创建cookie处理器
handler = urllib2.HTTPCookieProcessor(cookie)
# 通过handler来构建opener
opener = urllib2.build_opener(handler)
# 创建一个请求,原理同urllib2的urlopen
response = opener.open("http://www.baidu.com")
# 保存cookie到文件
cookie.save(ignore_discard=True, ignore_expires=True)

  关于最后save方法的两个参数在此说明一下:

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

3)从文件中获取Cookie并访问

  那么我们已经做到把Cookie保存到文件中了,如果以后想使用,可以利用下面的方法来读取cookie并访问网站,感受一下

#-*- coding: UTF-8 -*-
import cookielib
import urllib2
import sys# 设置编码
reload(sys)
sys.setdefaultencoding('utf-8')
# 获得系统编码格式
type = sys.getfilesystemencoding()
# 创建MozillaCookieJar实例对象
cookie = cookielib.MozillaCookieJar()
# 从文件中读取cookie内容到变量
cookie.load('cookie.txt', ignore_discard=True, ignore_expires=True)
# 创建请求的request
req = urllib2.Request("http://www.baidu.com")
# 利用urllib2的build_opener方法创建一个opener
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
response = opener.open(req)
a = response.read().decode('utf-8').encode(type)
print a

  如果我们的 cookie.txt 文件中保存的是某个人登录百度的cookie,那么我们提取出这个cookie文件内容,就可以用以上方法模拟这个人的账号登录百度

4)利用cookie模拟网站登录

  利用cookie实现模拟登录,并将cookie信息保存到文本文件中

# -*- coding: utf-8 -*-
import urllib
import urllib2
import cookielib
import sys# 设置编码
reload(sys)
sys.setdefaultencoding('utf-8')
# 获得系统编码格式
type = sys.getfilesystemencoding()
filename = 'cookie.txt'
# 声明一个MozillaCookieJar对象实例来保存cookie,之后写入文件
cookie = cookielib.MozillaCookieJar(filename)
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
postdata = urllib.urlencode({'username': '201711200004','password': 'liuliu159'
})
# 登录教务系统的URL
loginUrl = 'http://ids.znufe.edu.cn/authserver/login?service=http%3A%2F%2Fyjs.znufe.edu.cn%2Fssfw%2Flogin_cas.jsp'
# 模拟登录,并把cookie保存到变量
result = opener.open(loginUrl, postdata)
# 保存cookie到cookie.txt中
cookie.save(ignore_discard=True, ignore_expires=True)
# 利用cookie请求访问另一个网址,此网址是成绩查询网址
gradeUrl = 'http://yjs.znufe.edu.cn/ssfw/index.do#'
# 请求访问成绩查询网址
result = opener.open(gradeUrl)
a = result.read().decode('utf-8').encode(type)
print a

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

  如登录之后才能查看的成绩查询,本学期课表等等网址,模拟登录就这么实现

转载于:https://www.cnblogs.com/lzhc/p/7922310.html

python爬虫(4)--Cookie的使用相关推荐

  1. 利用python爬虫(part15)--cookie模拟登陆

    学习笔记 文章目录 cookie模拟登陆 获取cookie 爬取我的简介 cookie模拟登陆 有的时候,我们想要抓取一个网站,但是需要先登录才能访问它,如果不输入用户名和密码,我们就会一直停留在登录 ...

  2. python爬虫之cookie方式自动登录巴比特网

    最近打算抓取公司内部PPT模板库中的PPT,发现被各种安全屏蔽.因为好久没写程序了,因此写几个例子回顾下基本的爬虫知识 目标网址巴比特的登录页面 http://8btc.com/member.php? ...

  3. python爬虫判断cookie过期_当爬虫遇到cookie失效,怎样处理?

    之前使用爬虫时,最让我头疼的就是cookie失效的问题了.由于有的cookie存在时效问题.一段时间后,cookies会失效.失效后,爬虫碰到的页面就基本上是重新登录的页面了.这时候就需要cookie ...

  4. python爬虫-使用cookie登录

    前言: 什么是cookie? Cookie,指某些网站为了辨别用户身份.进行session跟踪而储存在用户本地终端上的数据(通常经过加密). 比如说有些网站需要登录后才能访问某个页面,在登录之前,你想 ...

  5. python爬虫之---------------cookie和session

    cookie 1. cookie的由来: 大家都知道HTTP协议是无状态的. 无状态:是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响, ...

  6. Python爬虫进行Cookie登录

    不太喜欢说废话,直接开始. 一.首先找到发送登录请求(post或get)的url: 可以用抓包工具来进行捕捉,我用的工具是fiddler.fidder的安装及使用方法大家自行百度.这里假设大家已经安装 ...

  7. Python爬虫之Cookie和Session(转载)

    http://www.cnblogs.com/zhaof/p/7211253.html 转载于:https://www.cnblogs.com/shaosks/p/10298930.html

  8. python获取登录后的cookie_python爬虫使用cookie登录详解

    前言: 什么是cookie? Cookie,指某些网站为了辨别用户身份.进行session跟踪而储存在用户本地终端上的数据(通常经过加密). 比如说有些网站需要登录后才能访问某个页面,在登录之前,你想 ...

  9. python爬虫 - Urllib库及cookie的使用

    lz提示一点,python3中urllib包括了py2中的urllib+urllib2.[python2和python3的区别.转换及共存 - urllib] 怎样扒网页? 其实就是根据URL来获取它 ...

  10. Python爬虫入门(6):Cookie的使用

    Python爬虫入门(1):综述 Python爬虫入门(2):爬虫基础了解 Python爬虫入门(3):Urllib库的基本使用 Python爬虫入门(4):Urllib库的高级用法 Python爬虫 ...

最新文章

  1. 《交互式程序设计 第2版》一2.7 作用域
  2. SQL查询库、表,列等的一些操作
  3. iOS UIButton根据内容自动布局
  4. CCF - 201503-3 - 节日
  5. Web前端性能优化,应该怎么做?
  6. SpringBoot 整合Shiro实现动态权限加载更新+Session共享+单点登录
  7. java 栈和队列实现迷宫代码_使用两个队列实现一个栈
  8. maven项目jdk版本配置及常见错误Error:java: 无效的目标发行版: 8解决
  9. Qt 识别 DM 码
  10. HTTPS是如何保证安全的
  11. 后缀001,002,003等的文件解压
  12. rtsp 和 rtmp 推流(一)
  13. AD拼版工具 Embedded board array 进行PCB拼版注意事项
  14. 解决pytest运行时报错ModuleNotFoundError
  15. 软件外包如何正确定价
  16. python小玩意——创建文件夹
  17. 智能电视linux系统安装当贝,三星电视怎样安装当贝应用?
  18. 浏览器实时查看日志log.io
  19. 傲视天地 页游 一键端 自玩
  20. Python版名片管理系统源代码

热门文章

  1. 企业应用人工智能面临的挑战
  2. 2019 Flink Forward 大会最全视频来了!(附PPT下载) | 5大专题不容错过
  3. Python面向对象(一)
  4. Demo能为游戏带来什么?
  5. 未来的地下世界?《明日之后》打造专属半感染者的“未来都市”
  6. php绘制奥运五环(GD)
  7. 数据库面试题【十四、主键使用自增ID还是UUID】
  8. SQL基础【十九、触发器】(不建议使用触发器的原因)
  9. GoldenGate学习笔记(11)_常用参数
  10. Spring boot 上传文件时 MultipartFile 报空指针