【Python爬虫基础篇】--3.cookie和session
目录
1.1.定义
1.2.参数
1.3.分类
2.session
4.使用session登录
1.cookie
由于http是一个无状态的协议,请求与请求之间无法相互传递或者记录一些信息,cookie和session正是为了解决这个问题而产生。
例子:当我需要爬取我的微博账号的粉丝信息的时候,如果直接使用下面的代码
import requestsbase_url = 'https://weibo.com/u/6320270401'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36',
}
response=requests.get(base_url,headers=headers)
是获取不到信息的,
这并不是微博的个人信息页面。这也再一次证明了如果代码中并没有携带Cookie信息,则并不会进入到个人信息页面,而是跳转到了其他页面。
1.1.定义
定义:cookie指某些网站为例辨别用户身份,进行会话跟踪而存储在用户本地终端上的数据
1.2.参数
参数:
字段 | 作用 |
---|---|
Name | Cookie的名称,创建后不可更改。 |
Value | Cookie的值。Unicode字符需编码,二进制数据需BASE64编码。 |
Domain | 可访问该Cookie的域名(如 .zhihu.com 允许所有子域名访问)。若未指定,默认为当前域名。 |
MaxAge | 失效时间(秒)。正数表示存活时间;负数表示浏览器关闭后失效;0表示立即删除。与Expires 配合使用(优先级高于Expires )。 |
Path | 限制Cookie的路径访问。例如 /path/ 仅允许该路径下的页面访问;/ 表示全站可访问。 |
Size | Cookie的大小(字节)。 |
HTTP | 若为true ,则仅通过HTTP头传输,禁止JavaScript(如document.cookie )访问,增强安全性(防XSS攻击)。 |
Secure | 若为true ,仅通过HTTPS/SSL等安全协议传输,防止明文泄露。默认为false 。 |
1.3.分类
- 会话cookie
- 持久cookie
- 会话cookie指存在浏览器内存的cookie,当浏览器关闭,会话cookie会失效。
- 持久cookie是保存在硬盘上的cookie
- 这两种cookie的分配标准主要是通过maxAge或者expires这个cookie字段
2.session
(议会等的)会议,会期;
Session(会话)是服务端用来跟踪用户状态的机制。核心原理是:
- 服务器为每个用户创建唯一的Session ID(通常通过Cookie传递),并将用户数据(如登录信息、购物车)存储在服务端(内存、数据库或缓存中)。
- 客户端仅持有Session ID,实际数据不暴露,安全性更高。
维度 | Cookie | Session |
---|---|---|
存储位置 | 客户端 | 服务端 |
安全性 | 较低(需额外防护) | 较高(依赖Session ID安全) |
生命周期 | 可长期或会话级 | 通常会话级 |
性能影响 | 增加网络负载 | 增加服务器负载 |
典型应用 | 用户偏好、跟踪 | 登录状态、敏感操作 |
联系:当客户端发送一个cookie,服务器会从这个cookie中找到sessionID,再查找出相应的session信息返回给客户端,来进行用户页面的流转。如果通过sessionID来查找session的时候,发现没有session(一般第一次登陆或者清空了浏览器),那么就会创建一个session。
3.使用cookie登录微博
获取cookie:在控制台输入:
document.cookie
然后把获取到的cookie复制到代码中:
import urllibimport requestsurl = 'https://weibo.com/u/6320270401'headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) QQBrowser/11.8.5118.400','cookie':'你的cookie'
}
# 请求对象的定制# request = requests.get(url, headers=headers)
# 请求对象的定制
request = urllib.request.Request(url=url, headers=headers)
# 模拟浏览器向服务器发送请求
response = urllib.request.urlopen(request)
# 获取响应数据
content = response.read().decode("gb2312")
# 打印响应数据
print(content)
# 下载到本地
运行网页直接打开界面:
可以看到,得到的是个人信息页面,但内容并不完整,可以说是完全没有实际的内容,可能微博这几年不断更新,优化了反爬手段,只添加Cookie还不足以成功爬取个人页面的完整内容。不过,能到这一步就可以了。这里主要讲解Cookie的作用。
打开该页面,只呈现出页面框架,没有具体信息,并且显示不安全。
4.使用session登录
import requests
from urllib.parse import urljoinBASE_URL = 'https://login2.scrape.center/'
LOGIN_URL= urljoin(BASE_URL, '/login')
INDEX_URL = urljoin(BASE_URL, '/page/1')
USERNAME = 'admin'
PASSWORD = 'admin'session = requests.Session()response_login = session.post(LOGIN_URL, data={'username': USERNAME, 'password':PASSWORD})cookies = session.cookies
print('Cookies', cookies)response_index = session.get(INDEX_URL)
print('Response Status', response_index.status_code)
print('Response URL', response_index.url)
import requestsbase_url = 'http://www.renren.com/PLogin.do'
headers= {'Host': 'www.renren.com','Referer': 'http://safe.renren.com/security/account',
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36',
}
data = {'email':邮箱,'password':密码,
}
#创建一个session对象
se = requests.session()
#用session对象来发送post请求进行登录。
se.post(base_url,headers=headers,data=data)
response = se.get('http://www.renren.com/971682585')if '死性不改' in response.text:print('登录成功!')
else:print(response.text)print('登录失败!')
相关文章:

【Python爬虫基础篇】--3.cookie和session
目录 1.cookie 1.1.定义 1.2.参数 1.3.分类 2.session 3.使用cookie登录微博 4.使用session登录 1.cookie 由于http是一个无状态的协议,请求与请求之间无法相互传递或者记录一些信息,cookie和session正是为了解决这个问题而产生。 例子࿱…...
React 文件链条
在 React 项目中,首次展示在前台的是以下文件组合作用的结果: --- ### **核心文件链条** 1. **public/index.html** - 这是浏览器实际加载的入口文件 - 包含一个 <div id"root"></div> 容器 - 通过 <script> 标…...

分数线降低,25西电马克思主义学院(考研录取情况)
1、马克思主义学院各个方向 2、马克思主义学院近三年复试分数线对比 学长、学姐分析 由表可看出: 1、马克思主义理论25年相较于24年下降10分,为355分 3、25vs24推免/统招人数对比 学长、学姐分析 由表可看出: 1、 马克思主义学院25年共接…...
微信、抖音、小红书emoji符号大全
1、Emoji 日常符号 👣👀👁️👄💋👂🦻👃👅🧠🫀🫁🦷🦴💪🦾🦿🦵&a…...

Cancer Cell|scRNA-seq + scTCR + 空间多组学整合分析,揭示CD8⁺ T细胞在免疫治疗中的“双路径” | 临床问题的组学解答
Cancer Cell|scRNA-seq scTCR 空间多组学整合分析,揭示CD8⁺ T细胞在免疫治疗中的“双路径” 👋 欢迎关注我的生信学习专栏~ 如果觉得文章有帮助,别忘了点赞、关注、评论,一起学习 近日,《Cancer Cell》…...
ubuntu(28):ubuntu系统多版本conda和多版本cuda共存
0. cuda(包括cudnn)、conda安装照常 注意: (1)多个conda不要安装到一个目录了,可以见下面的示例目录; (2)cuda(包括cudnn)不用纠结是否添加超链接 1. 需要修改环境配置…...

C# 下 using 块的作用 + VS2022 下 using 语法糖怎样工作
🔍 using 的本意是什么? using 是 C# 中用于 自动释放资源 的语法糖,适用于实现了 IDisposable 接口的对象(比如数据库连接、文件、网络流等)。 🧐 首先看下SqlSugarClient类部分源码: SqlSug…...

实体店的小程序转型之路:拥抱新零售的密码-中小企实战运营和营销工作室博客
实体店的小程序转型之路:拥抱新零售的密码-中小企实战运营和营销工作室博客 在当今数字化浪潮的冲击下,实体店面临着前所未有的挑战,但小程序的出现为实体店转型新零售带来了新的曙光。先来看一组惊人的数据,据相关统计ÿ…...

UML 类图基础和类关系辨析
UML 类图 目录 1 概述 2 类图MerMaid基本表示法 3 类关系详解 3.1 实现和继承 3.1.1 实现(Realization)3.1.2 继承/泛化(Inheritance/Generalization) 3.2 聚合和组合 3.2.1 组合(Composition)3.2.2 聚…...

15.三数之和(LeetCode)java
个人理解: 1.使用双指针做法,首先对数组进行排序 第一重for循环控制第一个数,对数组进行遍历。双指针初始化为lefti1, rigthnums.length-1。然后使用while循环移动双指针寻找合适的数。因为返回的是数,不是下标,数不能…...
Spark读取Apollo配置
--conf spark.driver.extraJavaOptions-Dapp.idapollo的app.id -Denvfat -Dapollo.clusterfat -Dfat_metaapollo的meta地址 --conf spark.executor.extraJavaOptions-Dapp.idapollo的app.id -Denvfat -Dapollo.clusterfat -Dfat_metaapollo的meta地址 在spark的提交命令中&…...

如何通过 Websoft9 应用自托管平台一键安装任意版本 Odoo?
手工安装 Odoo 的复杂流程 环境准备阶段:安装 Docker 需熟悉 Linux 系统操作,需配置软件源、解决依赖冲突; 镜像获取阶段:从 Docker Hub 拉取官方镜像时可能因网络问题失败,且需自行验证版本兼容性; 容器…...
Anaconda3使用conda进行包管理
一、基础包管理操作 安装包 使用 conda install <包名> 安装指定包,支持多包批量安装和版本指定: conda install numpy # 安装单个包 conda install numpy scipy pandas # 批量安装多个包 conda install numpy1.21 # 指定版本 conda instal…...
exec和spawn
前言 需求:做一个electron应用,用node打开exe软件,打开后返回成功与否,打开的软件不会随electron应用的关闭而关闭 exec exec 第一个参数为要运行的command命令,参数以空格分隔。 child_process.exec(command[, opti…...
整平机:精密制造的“隐形守护者”
在金属加工车间里,一块表面凹凸不平的钢板经过一组高速旋转的辊轮后,神奇地变得如镜面般平整——这看似简单的场景背后,隐藏着现代工业对材料精度近乎苛刻的追求。整平机,这个常被忽视的工业设备,实则是高端制造业的基…...
Lesar: 面向 Lustre/Scade 语言的形式化模型检测工具
在《同步反应式系统》的第一课中,介绍了同步数据流语言 Lustre 生态中的形式化模型检查器 Lesar 的用法。Lesar 可对 lustre v4 语言以及 Scade 语言中部分数据流核心特性进行模型检查。 Lesar 介绍 Lesar 是 Verimag 研发维护的形式化方法模型检查工具。该工具的理…...
C++中的vector和list的区别与适用场景
区别 特性vectorlist底层实现动态数组双向链表内存分配连续内存块非连续内存块随机访问支持,通过索引访问,时间复杂度O(1)不支持,需遍历,时间复杂度O(n)插入/删除末尾操作效率高,时间复杂度O(1)任意位置操作效率高&am…...

VRRP与防火墙双机热备实验
目录 实验一:VRRP负载均衡与故障切换 实验拓扑编辑一、实验配置步骤 1. 基础网络配置 2. VRRP双组配置 二、关键验证命令 1. 查看VRRP状态 2. 路由表验证 三、流量分析 正常负载均衡场景: 故障切换验证: 实验二:防火…...

win11什么都不动之后一段时间黑屏桌面无法显示,但鼠标仍可移动,得要熄屏之后才能进入的四种解决方法
现象: 1. 当时新建运行的资源管理器的任务卡了或者原本资源管理器卡了 比如:当时在文本框中输入explorer 注:explorer.exe是Windows的文件资源管理器,它用于管理Windows的图形外壳,包括桌面和文件管理 按住CtrlAltEs…...
【前端】【业务场景】【面试】在前端开发中,如何优化 SVG(可缩放矢量图形)的性能,特别是在处理复杂图形和动画时
SVG 性能优化:循序渐进 4 步法 目标:先减负 → 再复用 → 后加速 → 最后按场景微调 ① 精简—把包袱先丢掉 删除无用元素 隐藏/被遮挡的 <path>、未引用的 <defs> 里渐变、滤镜。 合并路径 同填充色或描边的路径 ⇒ SVGO / SVGOMG「Mer…...

基于LAB颜色空间的增强型颜色迁移算法
本文算法使用Grok完成所有内容,包含算法改进和代码编写,可大大提升代码编写速度,算法改进速度,提供相关idea,提升效率; 概述 本文档描述了一种基于LAB颜色空间的颜色迁移算法,用于将缩略图D的…...

基于SIMMECHANICS的单自由度磁悬浮隔振器PID控制系统simulink建模与仿真
目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 单自由度磁悬浮减振器工作原理简介 4.2 SIMMECHANICS工具箱 5.完整工程文件 1.课题概述 基于SIMMECHANICS的单自由度磁悬浮隔振器PID控制系统simulink建模与仿真。其中,SIMMECHANICS是M…...
河北省大数据应用创新大赛样题
** 河北省大数据应用创新大赛样题 ** 1. 在Linux下安装Java并搭建完全分布式Hadoop集群。在Linux终端执行命令“initnetwork”,或双击桌面上名称为“初始化网络”的图标,初始化实训平台网络。 【数据获取】 使用wget命令获取JDK安装包: “w…...
RabbitMQ 的专业术语
术语定义示例/说明生产者(Producer)发送消息到 RabbitMQ 的客户端应用程序。日志系统将错误信息发送到 RabbitMQ。消费者(Consumer)从 RabbitMQ 队列中接收并处理消息的客户端应用程序。一个订单处理服务从队列中读取消息并更新数…...
【教程】安装 iterm2 打造漂亮且高性能的 mac 终端
【教程】安装 iterm2 打造漂亮且高性能的 mac 终端_mac 安装iterm2-CSDN博客 全面解析:Github网站无法访问的解决方法! 安装myzh 参考文章:https://blog.csdn.net/qq_44741467/article/details/135727124 下载地址:GitCode - 全球开发者的开源…...
redis特性及应用场景
文章目录 什么是redis?热库redis作为热库的特性redis适用场景 什么是redis? redis在系统架构中的位置就是冷热分离架构的热数据库位置, redis就是热库, 我们一般说缓存数据库。 其他的像MySQL、SQL Server这种关系数据库、MongoDB…...
算法 | 鲸鱼优化算法(WOA)原理,公式,应用,算法改进研究综述,完整matlab代码
===================================================== github:https://github.com/MichaelBeechan CSDN:https://blog.csdn.net/u011344545 ===================================================== 鲸鱼优化算法 一、原理与公式二、应用领域三、算法改进研究四、完整MAT…...
前端面试常见部分问题,及高阶部分问题
面试中也极有可能让你徒手写代码,无聊的面试问题o( ̄︶ ̄)o 一、HTML/CSS 基础与进阶 常见问题 什么是语义化标签?有哪些常用语义化标签? 答案:语义化标签是指具有明确含义的 HTML 标签,如 <header>、<footer>、<article>、<section> 等。它们有…...

C++初登门槛
多态 一、概念 多态是指不同对象对同一消息产生不同响应的行为。例如,蓝牙、4G、Wi-Fi 对“发送数据”指令有不同的具体实现。 二、核心理解 本质:通过基类指针或引用操作子类对象,实现运行时动态绑定。 表现形式: 接口统一&a…...
C/C++线程详解
一、C语言线程创建(POSIX线程) 1. 基本创建方法 POSIX线程(pthread)是C语言中创建线程的标准API: #include <pthread.h> #include <stdio.h>void* thread_func(void* arg) {printf("Thread runnin…...