请选择 进入手机版 | 继续访问电脑版
设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
查看: 2357|回复: 3

请问如何将requests返回的Response object存储在本地, 供之后取用?

[复制链接]

16

主题

1

好友

244

积分

中级会员

Rank: 3Rank: 3

发表于 2020-10-21 23:19:31 |显示全部楼层
通常我使用r=requests.get()后
都会将返回的r.text存储在本地, 供之后解析需要.
其实就是简单的文本存储.

但我好奇的是,
可否直接将r(也就是requests.get返回的response object)直接存在本地?
我尝试使用with open(file, 'wb') as f 这种方式,
但是读取的时候, 使用with open(file, 'rb") as f 却将读取的内容变成了byte, 就不是response obj了.

不知道python是不是能直接存储对象为本地文件, 之后读取后仍然是对象?

感谢.
回复

使用道具 举报

174

主题

45

好友

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

发表于 2020-10-22 12:35:44 |显示全部楼层
看下 pickle 库
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

16

主题

1

好友

244

积分

中级会员

Rank: 3Rank: 3

发表于 2020-10-22 13:40:07 |显示全部楼层
感谢crossin, 我其实尝试过pickle, 如果不涉及到with open的磁盘读写, pickle似乎没有问题.

但是如果遇到磁盘读写, 并用到了'rb'这样的方式, 被读取的数据就变成了byte, 之后再用pickle处理也无法还原出object了, 而是byte了.

所以我想问题也许出现在with open的语句中?
回复

使用道具 举报

174

主题

45

好友

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

发表于 2020-10-23 12:45:25 |显示全部楼层
rb 没问题,pickle本就是处理成二进制流,读出来的bytes你要在通过pickle还原的。再看看网上例子是怎么写的
  1. import pickle
  2. import requests

  3. r = requests.get('https://www.baidu.com')
  4. print(r.text[:100])
  5. path = 'test-pickle.dat'

  6. f = open(path, 'wb')
  7. pickle.dump(r, f)
  8. f.close()

  9. print('============')

  10. f1 = open(path, 'rb')
  11. r1 = pickle.load(f1)
  12. print(r1.text[:100])
复制代码
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|手机版|Archiver|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2024-3-28 22:29 , Processed in 0.014971 second(s), 22 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部