当前位置: 首页 > news >正文

【Python爬虫教程】第7篇-requests模块的cookies保存和使用

文章目录

    • 为什么要保存cookies
    • requests.utils工具类
    • 保存cookies到本地文件
    • 从本地文件解析cookies
    • 使用
    • 使用实践

为什么要保存cookies

保存cookies是避免每次都登录获取权限,一遍权限是有过期时间的,不需要每次重复登录,可以将cookies保存起来,用的时候再加载。适用于多机器并发式爬取数据或者抢票等功能。
在这里插入图片描述

requests.utils工具类

需要使用request.utils工具类进行解析cookie,从CookieJar转为字典,从字典转为CookieJar,需要特殊的操作。

# 将CookieJar转为字典:
cookie_dict= requests.utils.dict_from_cookiejar(r.cookies)# 将字典转为CookieJar:
cookies = requests.utils.cookiejar_from_dict(cookie_dict, cookiejar=None, overwrite=True)

保存cookies到本地文件

def save_cookie():# 登录成功, session里的cookie是最全的,response返回的cookie不全cookiejar = requests.utils.dict_from_cookiejar(request_session.cookies)with open(cookie_path, "w") as f:json.dump(cookiejar, f, indent=True)

比如下面这个网站cookie的保存内容:
在这里插入图片描述

从本地文件解析cookies

def __load_cookie():'''加载本地cookie,如果存在加载,如果不存在就返回空:param session::return:'''try:with open(cookie_path, "r") as f:load_cookie = json.load(f)return requests.utils.cookiejar_from_dict(load_cookie)except Exception as e:traceback.print_exc()return None

使用

将从本地解析出来的cookies同步到session中

request_session = requests.Session()
exist_cookies= requests.utils.cookiejar_from_dict(load_cookie)
request_session.cookies.update(exist_cookies)

使用实践

下面这个例子使用session方式请求,登录成功之后会调用save()保存cookie,每次重新启动程序会先加载cookies

import json
import tracebackimport requests.utilsfrom executor.page_executor import PageExecutor
from file_path import get_absolute_pathcookie_path = get_absolute_path('data/cookie.txt')
request_session: requests.Session = Nonedef __load_cookie():'''加载本地cookie,如果存在加载,如果不存在就返回空:param session::return:'''try:with open(cookie_path, "r") as f:load_cookie = json.load(f)return requests.utils.cookiejar_from_dict(load_cookie)except Exception as e:traceback.print_exc()return Nonedef get_session():global request_sessionif request_session is not None:return request_sessionelse:request_session = requests.Session()exist_cookies = __load_cookie()if exist_cookies is not None:request_session.cookies.update(exist_cookies)return request_sessiondef save_cookie():# 登录成功, session里的cookie是最全的,response返回的cookie不全cookiejar = requests.utils.dict_from_cookiejar(request_session.cookies)with open(cookie_path, "w") as f:json.dump(cookiejar, f, indent=True)logger.info('cookies saved to ./data/cookie.txt')
http://www.lryc.cn/news/401106.html

相关文章:

  • 微信小程序开发基础知识6----使用npm包
  • 如何在element中table的 v-for中 使用slot-scope?
  • 企业网络实验dhcp-snooping、ip source check,防非法dhcp服务器、自动获取ip(虚拟机充当DHCP服务器)、禁手动修改IP
  • 20. Python读取.mat格式文件通用函数
  • Cypress UI自动化之安装环境
  • SpringApplication.java类
  • 智能招聘系统的AI功能解析
  • AV1技术学习:Translational Motion Compensation
  • mysql中的存储过程
  • 07:串口通信二
  • 识别视频中的人数并统计出来
  • 【TypeDB 】机器学习和符号 AI 在机器人技术中的作用
  • EPLAN 去掉PDF中的红色跳转标识
  • 【car】深入浅出学习机械燃油车知识、结构、原理、维修、保养、改装、编程
  • 语音识别概述
  • 勒索防御第一关 亚信安全AE防毒墙全面升级 勒索检出率提升150%
  • elementui 日历组件el-calendar使用总结
  • RK3568 安卓12 EC20模块NOCONN没有ip的问题(已解决)
  • 【NLP自然语言处理】基于BERT实现文本情感分类
  • CSS选择器(1)
  • Claude 3.5 Sonnet模型发布,对比ChatGPT4o孰强孰弱
  • MySQL 分库分表
  • AutoMQ 社区双周精选第十二期(2024.06.29~2024.07.12)
  • Web开发:<div>标签作用
  • 如何使用unittest框架来编写和运行单元测试
  • 2024最新超详细SpringMvc常用注解总结
  • Linux硬件中断(IRQ)的基础知识
  • DP讨论——适配器模式
  • window下tqdm进度条
  • 记录些Redis题集(1)