1. 保存
介绍一个新的类:
MozillaCookieJar()
MozillaCookieJar 是从FileCookieJar 派生而来,他能创建与Mozilla浏览器 cookietxt 兼容的FileCookieJar实例。
from urllib import request
from http.cookiejar import MozillaCookieJar
#保存
# cookiejar = MozillaCookieJar('cookie.txt')
# handler = request.HTTPCookieProcessor(cookiejar)
# opener = request.build_opener(handler)
# resp = opener.open('http://www.httpbin.org/cookies/set/course/abc')
#
# cookiejar.save()
我们能通过这个MozillaCookieJar()类创建一个cookiejar,然后依次创建了handler和opener,我们将我们需要open的网站的request url写入,最后我们将这个获取的cookie保存下来。
可是,我们运行发现这个保存下来的文件并没有我们要的cookie信息,这是为什么呢?
save()函数,这里面可以添加保存的文件名,也可以写在MozillaCookieJar()创建时。
查看一下这个save函数的源码我们发现 :
这个save函数的参数 ignore_discard 和ignore_expires默认为false,
ignore_discard = false 表示,cookie被丢弃了就不保存下来,
ignore_expires = false 表示,cookie 过期了就不保存。
扫描二维码关注公众号,回复:
11792497 查看本文章
因此,当我们需要保存一个登录网站的cookie信息时,我们最好将这两个忽略值改成true,这样即使cookie被丢弃和过期,依然能够将我们所要用到的cookie信息保存下来。即下面这行代码:
cookiejar.save(ignore_discard=True,ignore_expires=True)
要注意着两个参数的使用
ignore_discard = true 表示,即使cookies即将被丢弃也要保存下来
ignore_expires = true 表示,如果cookies已经过期也保存并且文件以存在时也将覆盖掉。
2. 加载
加载一个cookie信息是读取加载的内容,使用的是load(),其他部分和保存是类似的。
#加载
cookiejar = MozillaCookieJar('cookie.txt')
cookiejar.load()
handler = request.HTTPCookieProcessor(cookiejar)
opener = request.build_opener(handler)
resp = opener.open('http://www.httpbin.org/cookies/set/course/abc')
for cookie in cookiejar:
print(cookie)