[爬蟲知識] 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.pswp.cn/web/81190.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/81190.shtml
英文地址,請注明出處:http://en.pswp.cn/web/81190.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋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 官方私有字…