python cookies过期_Python——Cookie保存到本地

方法一:结合cookielib及urllib2,Python2时期比较常用的方法,年代比较久远了。个人觉得太麻烦,改用requests.

▲需要注意的是cookielib在python3中已经改成了http.cookiejar

保存cookie

#该方法本人未测试

import urllib2

import cookielib

#将cookie保存在文件中

def saveCookie():

#设置保存cookie的文件

filename = 'cookie.txt'

#声明一个MozillaCookieJar对象来保存cookie,之后写入文件

cookie = cookielib.MozillaCookieJar(filename)

#创建cookie处理器

handler = urllib2.HTTPCookieProcessor(cookie)

#构建opener

opener = urllib2.build_opener(handler)

#创建请求

res = opener.open('http://www.baidu.com')

#保存cookie到文件

#ignore_discard的意思是即使cookies将被丢弃也将它保存下来

#ignore_expires的意思是如果在该文件中cookies已经存在,则覆盖原文件写入

cookie.save(ignore_discard=True,ignore_expires=True)

读取cookie

#从文件中获取cookie并且访问(我们通过这个方法就可以打开保存在本地的cookie来模拟登录)

def getCookie():

#创建一个MozillaCookieJar对象

cookie = cookielib.MozillaCookieJar()

#从文件中的读取cookie内容到变量

cookie.load('cookie.txt',ignore_discard=True,ignore_expires=True)

#打印cookie内容,证明获取cookie成功

for item in cookie:

print 'name:' + item.name + '-value:' + item.value

#利用获取到的cookie创建一个opener

handler = urllib2.HTTPCookieProcessor(cookie)

opener = urllib2.build_opener(handler)

res = opener.open('http://www.baidu.com')

print res.read()

方法二:使用requests.cookie

读取cookies

在这里我用的是LWPCookieJar保存在txt文件中,还有个是MozillaCookieJar,都是由FileCookieJar 派生而来,实现了save()方法,而FileCookieJar 没有实现save()MozillaCookieJar (filename,delayload=None,policy=None):从FileCookieJar派生而来,创建与Mozilla浏览器 cookies.txt兼容的FileCookieJar实例。

LWPCookieJar (filename,delayload=None,policy=None):从FileCookieJar派生而来,创建与libwww-perl标准的 Set-Cookie3 文件格式兼容的FileCookieJar实例。

#实例化一个LWPCookieJar对象

session = requests.session()

load_cookiejar = cookielib.LWPCookieJar()

#从文件中加载cookies(LWP格式)

load_cookiejar.load('cookies.txt', ignore_discard=True, ignore_expires=True)

#工具方法转换成字典

load_cookies = requests.utils.dict_from_cookiejar(load_cookiejar)

#工具方法将字典转换成RequestsCookieJar,赋值给session的cookies.

session.cookies = requests.utils.cookiejar_from_dict(load_cookies)

存储cookies将cookies转换成LWP格式然后保存为文本格式

#实例化一个LWPcookiejar对象

new_cookie_jar = cookielib.LWPCookieJar('cookie.txt')

#将转换成字典格式的RequestsCookieJar(这里我用字典推导手动转的)保存到LWPcookiejar中

===>RequestsCookieJar没有实现save()方法

requests.utils.cookiejar_from_dict({c.name: c.value for c in self.session.cookies}, new_cookie_jar)

#保存到本地文件

new_cookie_jar.save('cookies.txt', ignore_discard=True, ignore_expires=True)

方法三:将cookie字典弄成字典形式然后pickle或者json写入文件中

存储cookie

import requests,json,pprint

s = requests.session()

s.headers = {...}

a = s.get("https://www.baidu.com")

cookies = requests.utils.dict_from_cookiejar(s.cookies)

with open(".\\cook.txt", "w") as fp:

json.dump(cookies, fp)

pprint.pprint(cookies,width=5)

读取cookie

with open(".\cook.txt", "w") as fp:

load_cookies=son.load(fp)

session.cookie = requests.utils.cookiejar_from_dict(load_cookies)

方法四:将requests.cookie设置为LWPCookieJar、或MozillaCookieJar保存

session = requests.Session()

#创建个 LWPCookieJar对象

session.cookies = LWPCookieJar(filename='cook.txt')

s.get('https://www.baidu.com/',headers=headers)

session.cookies.save(ignore_discard=True, ignore_expires=True)

#如果save()时没有写filename参数,则默认为实例化LWPCookieJar时给的文件名

save()方法的两个重要参数ignore_discard: save even cookies set to be discarded.

ignore_expires: save even cookies that have expired.The file is overwritten if it already exists

ignore_discard的意思是即使cookies将被丢弃也将它保存下来,ignore_expires的意思是如果cookies已经过期也将它保存并且文件已存在时将覆盖总结方法二和方法四可以看出,就是要将cookie转换成然后save()

简单介绍下cookielib模块作用,科普下实现cookie知识python3中将cookielib模块改为了http.cookiejar cookielib模块的主要作用是提供可存储cookie的对象,以便于与urllib2模块配合使用来访问Internet资源。例如可以利用本模块 的CookieJar类的对象来捕获cookie并在后续连接请求时重新发送。coiokielib模块用到的对象主要有下面几个:CookieJar、 FileCookieJar、MozillaCookieJar、LWPCookieJar。其中他们的关系如下:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值