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 相关文章推荐
Python ljust rjust center输出
Sep 06 Python
用python删除java文件头上版权信息的方法
Jul 31 Python
Python对小数进行除法运算的正确方法示例
Aug 25 Python
关于你不想知道的所有Python3 unicode特性
Nov 28 Python
Python中格式化format()方法详解
Apr 01 Python
python3 property装饰器实现原理与用法示例
May 15 Python
IronPython连接MySQL的方法步骤
Dec 27 Python
python-docx文件定位读取过程(尝试替换)
Feb 13 Python
浅谈Pytorch torch.optim优化器个性化的使用
Feb 20 Python
Python图像处理库PIL的ImageFont模块使用介绍
Feb 26 Python
详解Python GUI编程之PyQt5入门到实战
Dec 10 Python
pytorch 如何使用float64训练
May 24 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网页标题中文乱码的有效解决方法
2014/03/05 PHP
PHP实现算式验证码和汉字验证码实例
2015/03/09 PHP
php查询mysql数据库并将结果保存到数组的方法
2015/03/18 PHP
Zend Framework教程之Autoloading用法详解
2016/03/08 PHP
php pdo oracle中文乱码的快速解决方法
2016/05/16 PHP
用jquery来定位
2007/02/20 Javascript
JS request函数 用来获取url参数
2010/05/17 Javascript
javascript学习笔记(九)javascript中的原型(prototype)及原型链的继承方式
2011/04/12 Javascript
深入理解JavaScript系列(16) 闭包(Closures)
2012/04/12 Javascript
基于jquery的多功能软键盘插件
2012/07/25 Javascript
在ASP.NET MVC项目中使用RequireJS库的用法示例
2016/02/15 Javascript
jQuery UI库中dialog对话框功能使用全解析
2016/04/23 Javascript
最丑的时钟效果!js canvas时钟制作方法
2016/08/15 Javascript
HTML5 js实现拖拉上传文件功能
2020/11/20 Javascript
jQuery 实现倒计时天,时,分,秒功能
2018/07/31 jQuery
Element Table的row-class-name无效与动态高亮显示选中行背景色
2018/11/30 Javascript
基于vue.js实现分页查询功能
2018/12/29 Javascript
Vue-cli项目部署到Nginx服务器的方法
2019/11/01 Javascript
[01:04:05]Mineski vs TNC 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
python的dict,set,list,tuple应用详解
2014/07/24 Python
python去除文件中空格、Tab及回车的方法
2016/04/12 Python
Python实现XML文件解析的示例代码
2018/02/05 Python
打包python 加icon 去掉cmd黑窗口方法
2019/06/24 Python
pygame实现贪吃蛇游戏(下)
2019/10/29 Python
python图形开发GUI库pyqt5的基本使用方法详解
2020/02/14 Python
video结合canvas实现视频在线截图功能
2018/06/25 HTML / CSS
什么是事务?事务有哪些性质?
2012/03/11 面试题
外贸主管求职简历的自我评价
2013/10/23 职场文书
《手指教学》反思
2014/02/14 职场文书
毕业生就业推荐表自我鉴定
2014/03/20 职场文书
博士生导师推荐信
2014/07/08 职场文书
实验心得体会
2014/09/05 职场文书
教师个人教学总结
2015/02/11 职场文书
Mysql分库分表之后主键处理的几种方法
2022/02/15 MySQL
Windows Server 修改远程桌面端口的实现
2022/06/25 Servers
Win10系统搭建ftp文件服务器详细教程
2022/08/05 Servers