Mrli
别装作很努力,
因为结局不会陪你演戏。
Contacts:
QQ博客园

Python爬虫知识点——将Cookie保存到本地的多种方法介绍

2019/09/15 爬虫 Python
Word count: 1,029 | Reading time: 5min

方法一:urllib2

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#该方法本人未测试
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来模拟登录)
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实例。
1
2
3
4
5
6
7
8
9
#实例化一个LWPCookieJar对象
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.
self.session.cookies = requests.utils.cookiejar_from_dict(load_cookies)
存储cookies

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

1
2
3
4
5
6
7
8
9
#实例化一个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)

cookie3

方法三:

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

存储cookie
1
2
3
4
5
6
7
8
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
1
2
3
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保存

1
2
3
4
5
6
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时给的文件名

cookie4


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

1
2
3
4
5
6
7
8
9
10
>   cookielib模块的主要作用是提供可存储cookie的对象,以便于与urllib2模块配合使用来访问Internet资源。例如可以利用本模块 的CookieJar类的对象来捕获cookie并在后续连接请求时重新发送。coiokielib模块用到的对象主要有下面几个:CookieJar、 FileCookieJar、MozillaCookieJar、LWPCookieJar。其中他们的关系如下:
>
> CookieJar
>
> |
>
> FileCookieJar
>
> / \
>

MozillaCookieJar LWPCookieJar

Author: Mrli

Link: https://nymrli.top/2018/10/24/Python爬虫知识点——将Cookie保存到本地的多种方法介绍/

Copyright: All articles in this blog are licensed under CC BY-NC-SA 3.0 unless stating additionally.

< PreviousPost
Sublime Text3 Python虚拟环境(补充)——解决控制台中文乱码情况
NextPost >
Python爬虫知识点——Session与Cookie
CATALOG
  1. 1. 方法一:urllib2
  2. 2. 方法二:
    1. 2.0.1. 读取cookies
    2. 2.0.2. 存储cookies
  • 3. 方法三:
    1. 3.0.1. 存储cookie
    2. 3.0.2. 读取cookie
  • 3.1. save()方法的两个重要参数