CookieJar是对于Cookie类的一个类似管理类的封装。
类继承图,CookieJar是基类
CookieJar类有一些子类,分别是FileCookieJar,MozillaCookieJar,LWPCookieJar。
CookieJar:管理HTTP cookie值、存储HTTP请求生成的cookie、向传出的HTTP请求添加cookie的对象。整个cookie都存储在内存中,对CookieJar实例进行垃圾回收后cookie也将丢失。
FileCookieJar (filename,delayload=None,policy=None):从CookieJar派生而来,用来创建FileCookieJar实例,检索cookie信息并将cookie存储到文件中。filename是存储cookie的文件名。delayload为True时支持延迟访问访问文件,即只有在需要时才读取文件或在文件中存储数据。
MozillaCookieJar (filename,delayload=None,policy=None):从FileCookieJar派生而来,创建与Mozilla浏览器 cookies.txt兼容的FileCookieJar实例。
LWPCookieJar (filename,delayload=None,policy=None):从FileCookieJar派生而来,创建与libwww-perl标准的 Set-Cookie3 文件格式兼容的FileCookieJar实例。
使用
import urllib.request
import http.cookiejar
'''
获取Cookie,并保存到CookieJar()对象中
'''
#====================================
#构建一个CookieJar对象实例来保存cookie
cookiejar = http.cookiejar.CookieJar()
#使用HTTPCookieProcessor()来创建cookie处理器对象,参数为CookieJar()对象
handler = urllib.request.HTTPCookieProcessor(cookiejar)
#通过build_opener()来构建opener
opener = urllib.request.build_opener(handler)
#以get方法访问页面,访问之后会自动保存cookie到cookiejar中
opener.open("http://www.baidu.com")
#可以按照标准格式将保存的Cookie打印出来
cookieStr = ""
for item in cookiejar:
cookieStr = cookieStr + item.name + "=" +item.value + ";"
#舍去最后一位的分号
print(cookieStr[:-1])
'''
把获得的cookie保存在cookie文件中
'''
#====================================
filename = "cookie.txt"
#声明一个MozillaCookieJar(有save实现)对象实例来保存cookie,之后写入文件
cookiejar = http.cookiejar.MozillaCookieJar(filename)
handler = urllib.request.HTTPCookieProcessor(cookiejar)
opener = urllib.request.build_opener(handler)
response = opener.open("http://www.baidu.com")
#保存cookie到本地文件
cookiejar.save()
'''
从文件中获取cookies,作为请求的一部分去访问
'''
#====================================
#创建MozillaCookieJar(有load实现)实例对象
cookiejar = http.cookiejar.MozillaCookieJar()
#从文件中读取cookie内容到变量
cookiejar.load('cookie.txt')
handler = urllib.request.HTTPCookieProcessor(cookiejar)
opener = urllib.request.build_opener(handler)
response = opener.open("http://www.baidu.com")
print(response)