[爬虫知识] Cookie与Session

相关实战案例:[爬虫实战] 爬取小说标题与对应内容

相关爬虫专栏:JS逆向爬虫实战  爬虫知识点合集  爬虫实战案例


一、引入场景

在http协议中,浏览器是无状态(即无记忆)的,对于请求与响应的产生数据,浏览器都不会保留。这对于某些希望记住用户当前状态,保存用户信息的网站就不太友好。cookie与session就是用于处理这个问题的,二者都用于保存用户当前的状态。

二、cookie的作用

概念:cookie 是浏览器端用来跟踪用户状态的机制。

当用户访问网站时会携带一个空cookie发起请求,而服务器返回响应数据时则会传回一个cookie给浏览器作为身份验证。此后再访问该网站就会自动携带这个,作为身份信息查询。

cookie最常见作用为会话管理(跟踪和管理用户的交互行为):

  • 登录状态 -- 保存登录信息
  • 购物车 -- 保存当前商品状态
  • 个性化设置 -- 保存当前用户偏好(语言、主题等)

特点:

  • 存储在客户端(浏览器)
  • 有过期时间限制
  • 安全性较差,可能会被恶意攻击

三、session的作用与其跟cookie的区别

概念:Session是服务器端用来跟踪用户状态的机制。

当用户首次访问服务器时,服务器会为其创建一个独特的Session ID,存储在服务器中。而为了能让浏览器后续请求能带上这个ID,一般也会将Sesion ID通过cookie形式传递给浏览器。

与cookie区别:

  • 位置:cookie存于客户端 - session存于服务器端,只给客户端传一个session id
  • 内容:cookie存少量、非敏感数据 - session存复杂,敏感数据
  • 安全:cookie相对较差(客户端处容易被篡改) - session相对更优(服务器端难以修改)

结:

cookie与session经常协同合作。cookie更像是信使,主要作用是帮助传递session ID。而session因为其安全性高、存储量大,信息位于服务器端等优势,通常被认为是真正的“记忆”所在处。

四、cookie与session在爬虫中的涉及

爬虫中常有遇到需要正确理解cookie/session机制,从而破解含有分页、登录、反爬等的网站。

这里我们就会用到非常强大的工具:requests.session(取代requests.get/post):

1.requests.get/post()的痛点

(1) 无法维持自动化登录状态

HTTP协议是无状态的,requests.get每次都是独立请求,无法获得并保存之前浏览器返回的cookie。这个问题会导致每次请求都必须重新发送登录信息并手动解析与提取,导致代码明显复杂而且也无法维持自动化的登录。

(2) 效率底下

每次调用request.get都会尝试建立一个全新的TCP连接的三次握手还有可能存在的SSL/TLS(安全加密协议)握手。这个过程中重复建立与关闭连接的开销很大,明显拖累爬取进度,效率低下。

(3) 容易触发服务器的连接频率限制

对于部分爬取的网站,requests.get过高的连接/断开频率与真实浏览器的访问样式明显不同。当被识别为异常访问后很可能直接将其断开或拒绝服务。

怎么办呢?这里就轮到我们的requests.session大人登场了

2.requests.session的优点

以上的痛点都能被requests.session高效解决:

  • 自动管理会话 -- 在发送请求的过程中会自动获取并返回对应cookie
  • 高效连接复用 -- Session会自建一个连接池,在发送多个连接时会尝试复用已建立的TCP连接,显著减少建立连接时的开销。
  • 有效规避对连接频率的反爬 -- 浏览器只会看到建立稳定持久链接上的数据传输

3. 用法

非常简单:

session = requests.session()
response =session.get/post()

只用加上句话,再把请求中的requests改成session,其他照常写即可。

这个实战与相关图文讲解可以帮你快速建立起对requests.session用法与其强大之处的感觉:

五、小结

cookie与session都是用来跟踪用户状态,保存用户信息,而session则在其中起主要作用。

在日常爬取中尽量把以前常用的requests的请求方式改为requests.session,能够明显提高爬虫代码的健壮度。

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

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

相关文章

怎样改变中断优先级?

在STM32中改变中断优先级可以通过STM32CubeMX配置和代码中设置两种方式来实现。以下以STM32F1系列为例进行说明: 使用STM32CubeMX配置 打开工程:在STM32CubeMX中打开你的工程。进入NVIC配置:在Pinout & Configuration选项卡中,点击NVIC进入中断向量控制器配置界面。选…

科学计算中的深度学习模型精解:CNN、U-Net 和 Diffusion Models

关键要点 模型概述:卷积神经网络(CNN)、U-Net 和 Diffusion Models 是深度学习中的核心模型,广泛应用于科学计算任务,如偏微分方程(PDE)求解、图像分割和数据生成。科学计算应用:CNN 可用于高效求解 PDEs,U-Net 擅长医学图像分割和材料分析,Diffusion Models 在生成合…

解决Docker无法拉取镜像问题:Windows系统配置镜像加速全指南

问题背景 在使用 Docker 时,你是否遇到过以下报错? Unable to find image ‘mysql:latest’ locally docker: Error response from daemon: Get “https://registry-1.docker.io/v2/”: dial tcp 128.242.250.155:443: i/o timeout. 这类问题通常是由于…

Spring AI 使用教程

Spring AI 使用教程(2025年5月24日更新) 一、环境搭建与项目初始化 创建Spring Boot项目 使用IDEA或Spring Initializr创建项目,选择JDK 17或更高版本(推荐21)。勾选依赖项:Spring Web、Lombok,…

iOS 直播特殊礼物特效实现方案(Swift实现,超详细!)

特殊礼物特效是提升直播互动体验的关键功能,下面我将详细介绍如何在iOS应用中实现各种高级礼物特效。 基础特效类型 1.1 全屏动画特效 class FullScreenAnimationView: UIView {static func show(with gift: GiftModel, in view: UIView) {let effectView FullS…

分布式事务之Seata

概述 Seata有四种模式 AT模式:无侵入式的分布式事务解决方案,适合不希望对业务进行改造的场景,但由于需要添加全局事务锁,对影响高并发系统的性能。该模式主要关注多DB访问的数据一致性,也包括多服务下的多DB数据访问…

信息收集与搜索引擎

6.1 常见的搜索引擎(一、二) 6.1.1 通用搜索引擎 Google/Bing: 用途:基础信息收集(域名、子域名、敏感文件)。 高级语法: site:target.com:限定搜索目标域名。 filetype:pdf&am…

【Java项目测试报告】:在线聊天平台(Online-Chat)

被测试项目已部署:登录页面http://123.249.78.82:8080/login.html 一、项目背景 1.1 测试目标 验证系统功能完整性,确保用户管理、消息传输、好友管理等核心模块符合需求。 1.2 项目技术栈 后端:Spring Boot/Spring MVC/WebSocket 数据…

RAGFlow与Dify的深度刨析

目录 一、RAGFlow 框架 二、Dify 框架 三、两者集成 四、深度对比 1. 核心定位对比 2. 核心功能对比 3. 技术架构对比 4. 部署与成本 5. 适用场景推荐 总结 一、RAGFlow 框架 RAGFlow 是一个专注于深度文档理解和检索增强生成(RAG)技术的框架…

CQF预备知识:一、微积分 -- 1.2.2 函数f(x)的类型详解

文中内容仅限技术学习与代码实践参考,市场存在不确定性,技术分析需谨慎验证,不构成任何投资建议。 📖 数学入门全解 本系列教程为CQF(国际量化金融分析师证书)认证所需的数学预备知识,涵盖所有需要了解的数学基础知识…

嵌入式工程师常用软件

1、 Git Git 是公司常用的版本管理工具,人人都要会。在线的 git 教程可以参考菜鸟教程: https://www.runoob.com/git/git-tutorial.html 电子书教程请在搜索栏搜索: git Git 教程很多,常用的命令如下,这些命令可…

TReport组件指南总结

1. TReport 组件简介 TReport 是一个用于生成和打印报表的组件,通常用于连接数据集(如 TDataSet)并设计复杂的报表布局。它支持动态数据绑定、多页报表、分组统计、图表插入等功能。 2. 安装与配置 安装:如果使用的是第三方报表工具(如 Rave Reports),需在 Delphi 中通…

spark任务的提交流程

目录 spark任务的提交流程1. 资源申请与初始化2. 任务划分与调度3. 任务执行4. 资源释放与结果处理附:关键组件协作示意图扩展说明SparkContext介绍 spark任务的提交流程 用户创建一个 Spark Context;Spark Context 去找 Cluster Manager 申请资源同时说明需要多少 CPU 和内…

【C++】C++异步编程四剑客:future、async、promise和packaged_task详解

C异步编程四剑客:future、async、promise和packaged_task详解 1. 引言 1.1 异步编程的重要性 在现代C编程中,异步操作是提高程序性能和响应能力的关键技术。它允许程序在等待耗时操作(如I/O、网络请求或复杂计算)完成时继续执行…

2021-10-28 C++判断完全平方数

缘由判断一个整数是否为完全平方数-编程语言-CSDN问答 整数用平方法小数用5分法逼近。 int 判断平方数(int n) {//缘由https://ask.csdn.net/questions/7546950?spm1005.2025.3001.5141int a 1;while (a < n / a)if (a*a < n)a;else if (a*a n)return 1;elsereturn 0…

解决weman框架redis报错:Class “llluminatelRedis\RedisManager“ not found

解决weman框架redis报错&#xff1a;Class "llluminatelRedis\RedisManager" not found 报错解决方案 报错 解决方案 按照手册执行 composer require psr/container ^1.1.1 illuminate/redis illuminate/events 安装redis组件 然后restart重启就行了 php webman s…

Windows 11 电源计划进阶——通过异类策略优化大小核CPU调度

一、为什么需要手动控制大小核调度&#xff1f; 1.1 Intel 12/13/14代酷睿与Win11的适配现状 Intel 12代酷睿首次引入混合架构设计&#xff08;P-Core性能核 E-Core能效核&#xff09;&#xff0c;Windows 11虽然原生支持线程调度器&#xff08;Thread Director&#xff09;…

文件系统·linux

目录 磁盘简介 Ext文件系统 块 分区 分组 inode 再谈inode 路径解析 路径缓存 再再看inode 挂载 小知识 磁盘简介 磁盘&#xff1a;一个机械设备&#xff0c;用于储存数据。 未被打开的文件都是存在磁盘上的&#xff0c;被打开的加载到内存中。 扇区&#xff1a;是…

如何使用redis做限流(golang实现小样)

在实际开发中,限流(Rate Limiting)是一种保护服务、避免接口被恶意刷流的常见技术。常用的限流算法有令牌桶、漏桶、固定窗口、滑动窗口等。由于Redis具备高性能和原子性操作,常常被用来实现分布式限流。 下面给出使用Golang结合Redis实现简单限流的几种常见方式(以“固定…

手写ES6 Promise() 相关函数

手写 Promise() 相关函数&#xff1a; Promise()、then()、catch()、finally() // 定义三种状态常量 const PENDING pending const FULFILLED fulfilled const REJECTED rejectedclass MyPromise {/*定义状态和结果两个私有属性:1.使用 # 语法&#xff08;ES2022 官方私有字…