浏览器用一行JS代码导出cookies.txt,Python的requests库导入cookies格式化为字典格式

news2024/11/26 10:23:38

在Python进行爬虫时,如果仅使用requests库打开某个网页,requests的session.cookies保存的cookies信息少得可怜,有时cookies甚至是空白!但浏览器里打开同一个网页,cookies信息非常详尽,比如浏览器的cookies保留了登录之后的状态信息,为了Python免登录快速进入某个网页,我们需要先将浏览器的网页cookies导出,然后在Python里使用requests库导入cookies。

第一步:浏览器导出文本格式的cookies.txt

在浏览器的地址栏里可以输入以下JS代码,快速导出当前页面的cookies为一个文本文件cookies.txt:

javascript: (function() { const a = document.createElement('a');  a.href = 'data:text/plain,' + document.cookie;  a.download = 'cookies.txt';  a.target = '_blank';  a.style.display = 'none';  document.body.appendChild(a);  a.click();  setTimeout(function() {    document.body.removeChild(a);  }, 100);})();

注意:不能直接粘贴以上的代码,否则浏览器会自动屏蔽掉开头的“javascript:”。

正确的姿势是:先在地址栏里输入或粘贴 javascript: (注意带冒号而且是半角的),然后再粘贴上面的JavaScript:后面的代码,敲回车,这样就能导出cookies.txt到指定的目录。

浏览器如果没有弹出保存文件的对话框,是因为浏览器设置了自动保存到默认的目录,如C:\Users\Administrator\Downloads\。如果需要浏览器每次保存文件都要咨询你保存到哪里,就要先在浏览器的设置里找到下面的设置:

 第二步:Python的requests库导入cookies.txt为字典格式

Requests库的session可以导入cookies,要求cookies必须是字典格式。

上面导出的cookies.txt只有一行,举个例子:

mediav={"_refnf":0};ID=ed5026a06; param={"user_agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64)","token":""}; cookie_referer=; token=validation:token

这只是为了方便展示而举个简单的例子,实际的cookies字符串会比这个更长。

前辈的做法是按分号来分割字符串,然后用dict()转成字典格式。但遇到这个例子,user-agent值也有分号,如果简单地按分号分割,分割出来再转字典格式会出错。

我的做法是:按等号分割,然后再去除多余的分号。

with open('cookies.txt', encoding = 'utf-8') as f:
    cookies = f.read()
'''
载入cookies.txt,假设cookies内容是:'mediav={"_refnf":0};ID=ed5026a06; param={"user_agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64)","token":""}; cookie_referer=; token=validation:token'
'''

l1=cookies.split('=')
print(l1)

'''
输出:
['mediav', '{"_refnf":0};ID', 'ed5026a06; param', '{"user_agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64)","token":""}; cookie_referer', '; token', 'validation:token']
'''

可以看到 l1 列表的偶数元素混杂了键和值,需要去除多余的分号,就要把它们拆散,下面是我改进的代码:

def cookies_to_dict(cookies):
    l1=l2=[]
    l1=cookies.split('=')
    for i in l1:
        if ';' in i:
            # 如果字符串存在分号就从后往前找分号来分割
            ss = i.rpartition(';')
            # rpartition()的作用就是从后往前找,返回三个元素的元组
            # 第一个为分隔符左边的子串,第二个为分隔符本身,第三个为分隔符右边的子串
            # 因此这里使用extend一次添加ss[0]和ss[2]的子串
            l2.extend([ss[0].strip(), ss[2].strip()])
            # strip()的作用是清除子串左端和右端的多余的空格
        else:
            l2.append(i.strip())
    c_dict={}
    for i in range(0,len(l2),2):
        c_dict.update({l2[i]:l2[i+1]})
    return c_dict


cookie_dict = cookies_to_dict(cookies)
print(cookie_dict)


'''
输出:
{'mediav': '{"_refnf":0}', 'ID': 'ed5026a06', 'param': '{"user_agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64)","token":""}', 'cookie_referer': '', 'token': 'validation:token'}
'''

这样cookies.txt就格式化成字典格式了。接下来就可以导入进requests的session里。

import requests

se = requests.Session()

se.cookies.clear()
# 先清空Session的cookies,再导入cookies_dict
se.cookies.update(cookies_dict)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/365001.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023-02-22 学习记录--TS-邂逅TS(二)

TS-邂逅TS(二) 不积跬步,无以至千里;不积小流,无以成江海。💪🏻 一、接口(interface) 在 ts 中,子类只能继承一个父类,不可多继承,但是…

2020蓝桥杯真题单词分析 C语言/C++

题目描述 小蓝正在学习一门神奇的语言,这门语言中的单词都是由小写英文字母组 成,有些单词很长,远远超过正常英文单词的长度。小蓝学了很长时间也记不住一些单词,他准备不再完全记忆这些单词,而是根据单词中哪个字母出…

恭喜!龙蜥社区荣登 2022 科创中国“开源创新榜”

2 月 20 日,中国科协召开以“创新提振发展信心,科技激发产业活力”为主题的2023“科创中国”年度会议。会上,“科创中国”联合体理事长、中国工程院院士周济介绍了 2022 年系列榜单征集遴选情况,并与中国科协副主席、中国工程院院…

音箱上8键触摸芯片绿芯GTC08L完美替换启攀微

由工采网代理提供的韩国GreenChip电容式触摸芯片-GTC08L是GreenTouch5CTM电容式触摸传感器系列之一;可以在发动机运行下进行8通道电容传感;对电磁兼容、电磁干扰、温湿度变化、电压干扰、温度漂移、湿度漂移等都有较强的抗干扰能力。不会对CS, RS,EFT&am…

在vue3+ts的项目中,如何解决vant组件自带表单校验不生效?

问题描述: 点击发送验证码后,为了让逻辑更加严谨,使用了vant组件自带的表单校验,进行二次校验,防止验证码发送成功后,登录手机号被二次修改,但根据官网描述cv之后不生效,甚至连获取…

3年自动化测试,月薪1.2W,不敢跳槽,每天都很焦虑

在我们的身边,存在一个普遍现象:很多人从事软件测试坎,不计其数,经历的心酸难与外人道也。可是技术确难以提升、止步不前,薪资也只能看着别人水涨船高,自己却没有什么起色。虽然在公司里属于不可缺少的一员…

轮播图、阅读注册协议、网页时钟、随机点名、小米搜索框、轮播图点击切换——web APIs练习

目录 一、获取元素(DOM) 1. 随机轮播图案例 2. 阅读注册协议(定时器间歇函数的应用) 3. 轮播图定时器版 4. 网页时钟 二、事件基础(DOM) 1. 随机点名案例 2. 轮播图点击切换(重点&#…

Python、Java、JavaScript、C、Go等编程语言如何实现“定时器”功能

这是CSDN平台2月推出的一个活动(活动链接为:CSDN 征文活动),聊聊时间的话题,小编我也不知道有什么好聊的时间的话题,看了CSDN给出的部分话题上,有一个这样的话题,如何用各种编程语言实现“定时器”&#xf…

初识SpringSpring核心容器

初识Spring Spring生态: Spring FrameWork发展: Spring FrameWork系统架构: Spring FrameWork学习路线: Spring核心概念 Ioc DI 实现IoC 1、导入Spring坐标 2、定义Spring管理的类(接口) 3、创建spring配…

tensorflow 学习笔记(三):神经网络八股

本节内容: 前两节使用 Tensorflow2 的原生代码大叫神经网络。本节使用 keras 搭建神经网络(八股:六步法,有 Sequential 和 class 两种)。 文章目录一、搭建网络八股 sequential1.1、keras 介绍1.2、六步法搭建 keras …

Mac搭建appium+python+Android自动化环境

mac搭建appium+python+Android自动化环境 一、安装jdk二、安装Android-SDK三、配置 Android 环境四、安装Appium五、打开appium一、安装jdk 自己百度 二、安装Android-SDK 1)下载地址: http://www.android-studio.org/index.php/download 下载mac版本的dmg 2) 下载完成后…

HTTPS:让数据传输更安全

鉴于 HTTP 的明文传输使得传输过程毫无安全性可言,且制约了网上购物、在线转账等一系列场景应用,于是引入加密方案。 从 HTTP 协议栈层面来看,我们可以在 TCP 和 HTTP 之间插入一个安全层,所有经过安全层的数据都会被加密或者解密…

关于虚拟数字人你想知道的都在这里

2022年底,微软旗下的人工智能实验室Open AI发布的对话式大型语言模型ChatGPT聊天机器人一夜蹿红,5天用户量超百万,在各大中外媒体平台掀起了一阵热潮。也带火了人工智能相关产业,AI虚拟数字人就是其中之一,一个随着元宇…

损失函数与反向传播

一、损失函数计算实际输出和目标之间的差距为我们更新输出提供一定的依据(反向传播)1.nn.L1Lossimport torch from torch.nn import L1Loss inputs torch.tensor([1,2,3],dtypetorch.float) targets torch.tensor([1,2,5],dtypetorch.float) # reshape…

Docker之路(4.Docker命令大全、docker镜像命令、docker容器命令以及docker常用命令)

1.帮助命令 1.1 docker version(显示docker的版本信息) sudo docker version1.2 docker info(显示docker的系统信息,包括镜像和容器数量) sudo docker info1.3 --help (万能命令) sudo 命令 --help1。4 帮助文档的地址 https://docs.docker.com/engine/referenc…

纯手动搭建hadoop3.x集群记录001_搭建虚拟机_调通网络_配置静态IP_安装JDK---大数据之Hadoop3.x工作笔记0162

1.首先准备机器,172.19.126.115 172.19.126.116 172.19.126.117 我准备了3台 Windows机器 2.然后我打算在Windows机器上使用虚拟机,搭建3台Centos虚拟机来进行安装hadoop 3.这里我们的3台windows机器中的,3台linux虚拟机也使用了3个IP,分别是 172.19.126.120 172.19.126.1…

自然语言处理(NLP)之跳字(元)模型<skip-gram>与连续词袋模型<continuous bag of words>

自然语言处理(Natural Language Processing, NLP)是AI里的一个非常重要的领域,比如现在很火爆的ChatGPT,首先就需要很好的理解输入内容的意思才能够做出合理的回复。自然语言处理应用非常广泛,比如机器翻译、问题回答、文本语义对比、语音识别…

整合Swagger2

整合Swagger2 1、Swagger介绍 前后端分离开发模式中,api文档是最好的沟通方式。 Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。 1、及时性 (接口变更后,能够及时准确地通知相关前后端开发人员…

Java企业开发学习笔记(4)采用Java配置类管理Bean

该文章主要为完成实训任务,详细实现过程及结果见【http://t.csdn.cn/1fwEO】 文章目录一、采用Java配置类管理Bean1.1 创建子包1.2 创建杀龙任务类1.3 创建勇敢骑士类1.4 创建Spring配置类1.5 创建测试类1.6 运行测试类二、课堂练习2.1 创建救美任务类和救美骑士类2…

BERT模型系列大全解读

前言 本文讲解的BERT系列模型主要是自编码语言模型-AE LM(AutoEncoder Language Model):通过在输入X中随机掩码(mask)一部分单词,然后预训练的主要任务之一就是根据上下文单词来预测这些单词,从…