Python3中关于cookie的创建与保存


Posted in Python onOctober 21, 2018

1.cookie的作用

cookie 是指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据,就像有些网站上的一些数据是需要登录后才能看得到,那么想抓取某个页面内容,就需要用到cookie来模拟登陆了。

在用cookie模拟登陆的时候,需要用到python中的CookieJar,CookieJar中有一些子类,例如:

  • FileCookieJar,LWPCookieJar,MoziliaCookieJar
  • CookieJar 管理http生成的cookie,负责cookie的存储工作,向http当中添加指定的cookie

MozillaCookieJarLWPCookieJar类都是FileCookieJar的子类。实现了具体的把cookie内容保存为文件的方法。只是这两个类对应的标准不同而已。

2 获取cookie

from http.cookiejar import CookieJar,LWPCookieJar
from urllib.request import Request,urlopen,HTTPCookieProcessor,build_opener
from urllib.parse import urlencode
import ssl
# ----------------------------------------获取cookie---------------------------
# 生成一个管理cookie的对象
cookie_obj = CookieJar()
# 创建一个支持cookie的对象,对象属于HTTPCookieProcessor
cookie_handler = HTTPCookieProcessor(cookie_obj)  
#创建一个opener
opener = build_opener(cookie_handler)  
response = opener.open('http://www.baidu.com')
print(response)
#打印cookie
for cookie in cookie_obj:
  print('key:',cookie.name)
  print('value:',cookie.value)

3 保存cookie的文件

from http.cookiejar import CookieJar,LWPCookieJar
from urllib.request import Request,urlopen,HTTPCookieProcessor,build_opener
filename = 'neihan.txt'
# 设置cookie保存的文件
cookie_obj = LWPCookieJar(filename=filename)
# 创建一个支持cookie的对象,对象属于HTTPCookieProcessor
cookie_handler = HTTPCookieProcessor(cookie_obj)
#创建一个opener
opener = build_opener(cookie_handler)
#请求网页
response = opener.open('http://www.neihanshequ.com')
# 保存cookie到指定的文件当中去
# ignore_expires=True 即便目标cookie已经在文件中存在,仍然对其写入
# ignore_discard=True  即便cookie将要/已经过期,仍然写入
cookie_obj.save(ignore_expires=True,ignore_discard=True)

4 使用本地的cookie进行请求

from http.cookiejar import CookieJar,LWPCookieJar
from urllib.request import Request,urlopen,HTTPCookieProcessor,build_opener
cookie = LWPCookieJar()
#从文件中读取cookie到变量
cookie.load('neihan.txt')
request = Request('http://www.neihanshequ.com')
# 创建一个支持cookie的对象,对象属于HTTPCookieProcessor
cookie_handler = HTTPCookieProcessor(cookie)
#创建一个opener
opener = build_opener(cookie_handler)
#请求网页
response = opener.open(request)
# print(response.read().decode())

5 使用cookie进行模拟登陆

from http.cookiejar import CookieJar,LWPCookieJar
from urllib.request import Request,urlopen,HTTPCookieProcessor,build_opener
from urllib.parse import urlencode
import ssl
cookie = LWPCookieJar(filename='meishi.txt')
cookie_handler = HTTPCookieProcessor(cookie)
opener = build_opener(cookie_handler)
headers={
  'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0'
}
post_url = 'https://i.meishi.cc/login.php?redirect=https%3A%2F%2Fi.meishi.cc%2Flogin.php%3Fac%3Dzhuce'
# urlencode对url当中的参数进行编码
# urlencode()编码的对象为字典类型
post_data = urlencode({
  'username':'***********',  #自己的登陆账号
  'password':'************'  #自己的登陆密码
})
# 请求url 并传参,设置编码方式
request = Request(post_url,bytes(post_data,encoding='utf-8'))
# 解决证书问题
ssl._create_default_https_context = ssl._create_unverified_context
response = opener.open(request)
print(response.read().decode())
cookie.save(ignore_discard=True,ignore_expires=True)

这里的post_url是抓包获取来的

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。如果你想了解更多相关内容请查看下面相关链接

Python 相关文章推荐
9种python web 程序的部署方式小结
Jun 30 Python
使用Protocol Buffers的C语言拓展提速Python程序的示例
Apr 16 Python
python更新列表的方法
Jul 28 Python
Python中enumerate()函数编写更Pythonic的循环
Mar 06 Python
对Python的交互模式和直接运行.py文件的区别详解
Jun 29 Python
python global关键字的用法详解
Sep 05 Python
pytorch中torch.max和Tensor.view函数用法详解
Jan 03 Python
python新式类和经典类的区别实例分析
Mar 23 Python
Django-xadmin+rule对象级权限的实现方式
Mar 30 Python
python os.rename实例用法详解
Dec 06 Python
使用OpenCV实现人脸图像卡通化的示例代码
Jan 15 Python
Biblibili视频投稿接口分析并以Python实现自动投稿功能
Feb 05 Python
Python3中在Anaconda环境下安装basemap包
Oct 21 #Python
解决安装python库时windows error5 报错的问题
Oct 21 #Python
Scrapy使用的基本流程与实例讲解
Oct 21 #Python
Python3的介绍、安装和命令行的认识(推荐)
Oct 20 #Python
Python3 读、写Excel文件的操作方法
Oct 20 #Python
python numpy数组的索引和切片的操作方法
Oct 20 #Python
详解Python字典小结
Oct 20 #Python
You might like
php入门学习知识点三 PHP上传
2011/07/14 PHP
PHP中new static()与new self()的区别异同分析
2014/08/22 PHP
php准确获取文件MIME类型的方法
2015/06/17 PHP
php数组分页实现方法
2016/04/30 PHP
深入讲解PHP的对象注入(Object Injection)
2017/03/01 PHP
实现png图片和png背景透明(支持多浏览器)的方法
2009/09/08 Javascript
jquery.ui.progressbar 中文文档
2009/11/26 Javascript
JavaScript 函数replace深入了解
2013/03/14 Javascript
javascript实现客户端兼容各浏览器创建csv并下载的方法
2015/03/23 Javascript
JavaScript实现仿新浪微博大厅和腾讯微博首页滚动特效源码
2015/09/15 Javascript
jQuery学习笔记之回调函数
2016/08/15 Javascript
javascript稀疏数组(sparse array)和密集数组用法分析
2016/12/28 Javascript
Vue实现双向数据绑定
2017/05/03 Javascript
深入理解React高阶组件
2017/09/28 Javascript
javascript修改浏览器title方法 JS动态修改浏览器标题
2017/11/30 Javascript
vue-cli3脚手架的配置及使用教程
2018/08/28 Javascript
微信小程序CSS3动画下拉菜单效果
2018/11/04 Javascript
详解JavaScript作用域和作用域链
2019/03/19 Javascript
使用异步组件优化Vue应用程序的性能
2019/04/28 Javascript
koa2的中间件功能及应用示例
2020/03/05 Javascript
简单介绍Python中的try和finally和with方法
2015/05/05 Python
详解Django框架中用户的登录和退出的实现
2015/07/23 Python
Python入门学习之字符串与比较运算符
2015/10/12 Python
利用Python命令行传递实例化对象的方法
2016/11/02 Python
python批量添加zabbix Screens的两个脚本分享
2017/01/16 Python
Python SQLite3简介
2018/02/22 Python
python3 实现验证码图片切割的方法
2018/12/07 Python
Python Django框架模板渲染功能示例
2019/11/08 Python
PyCharm上安装Package的实现(以pandas为例)
2020/09/18 Python
世界上最大的罕见唱片、CD和音乐纪念品网上商店:991.com
2018/05/03 全球购物
电子商务个人自荐信
2013/12/12 职场文书
学生生病请假条范文
2014/02/16 职场文书
弘扬雷锋精神活动演讲稿
2014/03/04 职场文书
环保口号大全
2014/06/12 职场文书
CSS Transition通过改变Height实现展开收起元素
2021/08/07 HTML / CSS
Win7/8.1用户可以免费升级到Windows 11系统吗?
2021/11/21 数码科技