Python 关于爬虫过程中 使用pickle 保持cookies到本地 以及读取的简单方法
来源:互联网 发布:数据泄密如何防止拍照 编辑:程序博客网 时间:2024/05/22 13:28
在写的后面 想要进行功能完善的时候,想到平时浏览器可以通过保存的cookies进行登陆,不需要每次都输入密码,便也想给自己的爬虫加上这个功能。
一开始尝试的是
直接使用 基本的write函数 将Session().cookies保存到本地 然后通过read函数进行读取并赋值
开始试的时候就发现 还是想的太简单了 。write函数只能写入str类型,无法直接写入cookies这种 (伪)dict类型
后来 搜素了下write函数 写入dict类型的方法 发现无非就是 遍历键及其键值 ,然后将字符串存入,最后读取字符串的时候再还原成字典,并对cookies进行复制。
我用这种方法试了下,发现P站还是无法登陆,进过进一步搜索 发现 cookies是一种伪字典类型,即虽然它可以通过字典类型进行输入以及复制,但他并不是dict类型。
若强行转换,则可能丢失时间戳以及domain等数据,导致部分网站的cookies失效(如果我的理解错了,欢迎指正
无奈最后再次搜索保存cookies到本地并读取的方法,发现网上的大部分都是通过dict进行保存的。一些则是通过python2版本的urlib库相关。更是有好多相同的照搬的文章。
还有一些用的是cookiesjar的函数。我试着照搬轮子运行,发现doomain等数据任然没保存下来(或许我的步骤还是错了,没有来得及通读cookielib的文档
最后尝试性的用谷歌浏览器用英文搜索了一番 ' requests how to save cookies to' ,最后在stackoverflow发现了这个问题,并且许多大佬给出了解决方案
l链接:
方法一
import requests.cookiesdef save_cookies(session, filename): if not os.path.isdir(os.path.dirname(filename)): return False with open(filename, 'w') as f: f.truncate() pickle.dump(session.cookies._cookies, f)def load_cookies(session, filename): if not os.path.isfile(filename): return False with open(filename) as f: cookies = pickle.load(f) if cookies: jar = requests.cookies.RequestsCookieJar() jar._cookies = cookies session.cookies = jar else: return False
主要运用python自带的pickle功能块, 保存和读取的时候只需要分别调用 save_cookies和load_cookies函数就好了
方法二
A full example :
import requests, requests.utils, picklesession = requests.session()# Make some callswith open('somefile', 'w') as f: pickle.dump(requests.utils.dict_from_cookiejar(session.cookies), f)
Loading is then :
with open('somefile') as f: cookies = requests.utils.cookiejar_from_dict(pickle.load(f)) session = requests.session(cookies=cookies)
本质上也是对Pickle功能块的运用
Pickle官方文档
pickle与writle相比最大的差别就是pickle是序列化存储以及读取的,即 不管是python中的什么数据结构,都直接原样打包保存,读取的时候再原样读取。这样 可以避免丢失cookies中至关重要的时间戳和domain等数据
最后我使用 方法一 成功得 保存且利用读取的cookies登陆pixiv
谷歌大法好 遇上不会的完全可以先上stackoverflow搜索
- Python 关于爬虫过程中 使用pickle 保持cookies到本地 以及读取的简单方法
- python pickle模块使用-将内存数据保存到文本中以及从文本中直接读取信息到内存中
- 爬虫时保持cookies一直有效的方法
- Python 实现简单的爬虫功能并保存到本地
- python数据持久化到文件并读取:pickle的使用
- python爬虫数据保存到本地各种格式的方法
- IOS 本地Cookies 读取方法
- Python中pickle模块的使用
- selenium+python关于登录的脚本代码,使用了读取excel以及向excel中写入测试结果的方法
- selenium+python关于登录的脚本代码,使用了读取excel以及向excel中写入测试结果的方法
- 带cookies的python爬虫
- python学习笔记28(python中pickle的使用)
- 关于ASP.NET中图片上传到MSSQL数据库以及读取的方法
- python爬虫get和post方法的使用以及cookie
- python中pickle的用法
- python 保持json数据到本地时的编码
- Python简单知乎爬虫--爬取页面的图片并下载到本地
- Python简单知乎爬虫--爬取页面的图片并下载到本地
- 1007. Rails
- select语句中的多表查询
- 写一个线程安全的单例模式
- java中的==、equals()、hashCode()源码分析
- 夜灵的JS笔记Day01——JavaScript基础
- Python 关于爬虫过程中 使用pickle 保持cookies到本地 以及读取的简单方法
- SHOW INNODB STATUS walk through
- UniFi AP 5.5.20的基本使用与设置(普通漫游和无缝漫游)
- get和post的区别
- 高效程序员的45个习惯
- JDK环境变量配置及原理解释(Windows)
- 初试wsgi——实现简易动态http服务器(面向对象版)
- tomcat热部署
- 【学习笔记七】