Cookies主要用于获取用户登陆信息,比如,通过提交数据实现用户登录之后,会生成带有登录状态的Cookies,将Cookies保存到本地文件。下次登录可以直接读取Cookies文件实现登录。对于复杂的登录,如验证码,图片等Cookies能简单解决重复登录的问题。
Urllib提供HTTPCookieProcessor( )对Cookies操作。但Cookies的读写是由MolzillaCookiejar( )完成的
实现Cookie写入文件
# -*- coding: utf-8 -*-
"""
Created on Sun Jul 29 22:36:20 2018
@author: 部落大圣
"""
import urllib.request
from http import cookiejar
filename = 'cookie.txt'
# MozillaCookieJar保存cookie
cookie = cookiejar.MozillaCookieJar(filename)
# HTTPCookieProcessor创建cookie处理器
handler = urllib.request.HTTPCookieProcessor(cookie)
# 创建自定义opener
opener = urllib.request.build_opener(handler)
# open方法打开网页
reponse = opener.open('https://movie.douban.com')
# 保存cookie文件
cookie.save()
代码中的cookie jar是自动处理HTTP Cookies的类,Mozilla Cookie jar() 用于将Cookies内容写入文件。程序运行时先创建MozillaCookiejar()对象,然后将对象直接传入函数HTTP Cookie Processor(),生成opener对象;最后使用opener对象访问URL,访问过程所产生的Cookies就直接写入已创建的文本文档中。
接着再看如何读取Cookies,代码如下:
# -*- coding: utf-8 -*-
"""
Created on Sun Jul 29 22:55:15 2018
@author: 部落大圣
"""
import urllib.request
from http import cookiejar
filename = 'cookie.txt'
# 创建MozillaCookieJar对象
cookie= cookiejar.MozillaCookieJar()
# 读取cookie内容到变量
cookie.load(filename)
# HTTPCookieProcessor创建cookie处理器
handler = urllib.request.HTTPCookieProcessor(cookie)
# 创建Opener
opener = urllib.request.build_opener(handler)
# opener打开网页
reponse = opener.open('https://movie.douban.com/')
# 输出结果
print(cookie)
读取和写入的方法很相似,主要区别在于;两者对MozillaCookieJar()对象的操作不同,导致实现功能也不同。运行结果如图所示
注意,为了方便测试,上述代码中使用的cookie.save()和cookie.load(filename)将Cookie内容显示在文本文档中。实际开发中,为了提高安全性,可以在保存很读取Cookies是设置参数,使Cookies信息隐藏在文件中。方法如下
cookie.save(ignore_discard=True,ignore_expires=True)
cookie.load(filename, ignore_discard=True, ignore_expires=True)