四:爬蟲-Cookie與Session實戰

四:CookieSession實戰

? 在瀏覽網站的過程中,我們經常會遇到需要登錄的情況,有些頁面只有登錄之后才可以訪問。在登錄之后可以連續訪問很多次網站,但是有時候過一段時間就需要重新登錄。還有一些網站,在打開瀏覽器時就自動登錄了,而且在很長時間內都不會失效,這里面所涉及的就是 SessionCookie 的相關知識

(1)Cookie

? 通過在客戶端記錄的信息確定用戶身份

? HTTP是一種無連接協議,客戶端和服務器交互僅僅限于請求 / 響應過程,結束后斷開,下一次請求時,服務器會認為是一個新的客戶端,為了維護他們之間的連接,讓服務器知道這是前一個用戶發起的請求,就必須在一個地方保存客戶端信息

(2)Session

? Session,中文稱之為會話,通過在服務端記錄的信息確定用戶身份,其本義是指有始有終的一系列動作。例如打電話時,從拿起電話撥號到掛斷電話之間的一系列過程就可以稱為一個 Session

爬蟲圖解CookieSession – 登錄流程:

在這里插入圖片描述

文字解析:

? 1.再次登錄其實就是驗證之前生成的賬號和密碼,從數據庫中去查詢當前的用戶是否存在,若存在就是登錄成功了,然后通過加密算法返回session_id
? 2.set_cookie是服務器返回的,因為只有服務器返回的才是set_cookie

? 3.服務端根據cookie中攜帶的session_id去名為session的數據庫(假設session_id存儲在名為session的數據庫中)中找session_id是否存在

? 4.這樣做的好處就是用戶只需要輸入一次賬號和密碼,之后在訪問網頁時,只需要在headers信息利用Cookie包含Session_id,后臺就可以根據Session_id來判斷用戶是否登錄

Cookie與Session實戰案例 – 12306查票示例:

import requestsheaders = {"Accept": "*/*","Accept-Language": "zh-CN,zh;q=0.9","Cache-Control": "no-cache","Connection": "keep-alive","If-Modified-Since": "0","Pragma": "no-cache","Referer": "https://kyfw.12306.cn/otn/leftTicket/init?linktypeid=dc","Sec-Fetch-Dest": "empty","Sec-Fetch-Mode": "cors","Sec-Fetch-Site": "same-origin","User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36","X-Requested-With": "XMLHttpRequest","sec-ch-ua": "^\\^Google","sec-ch-ua-mobile": "?0","sec-ch-ua-platform": "^\\^Windows^^"
}
cookies = {"_uab_collina": "170210568210505922888592","JSESSIONID": "44EBFDF0F56EDAAB390BD3821713F910","BIGipServerpassport": "921174282.50215.0000","guidesStatus": "off","highContrastMode": "defaltMode","cursorStatus": "off","route": "495c805987d0f5c8c84b14f60212447d","BIGipServerotn": "2698445066.64545.0000","_jc_save_fromStation": "^%^u5317^%^u4EAC^%^2CBJP","_jc_save_toStation": "^%^u4E0A^%^u6D77^%^2CSHH","_jc_save_toDate": "2023-12-09","_jc_save_wfdc_flag": "dc","_jc_save_fromDate": "2023-12-10"
}
url = "https://kyfw.12306.cn/otn/leftTicket/query"
params = {"leftTicketDTO.train_date": "2023-12-10","leftTicketDTO.from_station": "BJP","leftTicketDTO.to_station": "SHH","purpose_codes": "ADULT"
}
response = requests.get(url, headers=headers, cookies=cookies, params=params)data = response.json()
# print(data,type(data))result = data['data']['result']
# print(result,type(result))for item in result: # item代表每一個車次數據# print(item,"此時是字符串")data_li = item.split('|') # 代表每一車次的雜亂數據# print(data_li,"此時是列表")# for i,f in enumerate(data_li): # 這個for循環是為了確定一等做和車次的索引#     pass#     print(i,f) # 通過 '|' 分割,拿到每一個雜亂小數據的索引值與具體的值'''車次 -- 索引為3一等座 -- 索引為31'''if data_li[31] != "無" and data_li[31] != "":print(data_li[3], "有票", "一等座剩余:", data_li[31])else:print(data_li[3], "無票")print(data_li[3], "有票", "一等座剩余:", data_li[31])else:print(data_li[3], "無票")

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/211984.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/211984.shtml
英文地址,請注明出處:http://en.pswp.cn/news/211984.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

c語言歸并排序(詳解)

歸并排序是一種分治算法,它將列表分割成較小的子列表,然后遞歸地對子列表進行排序,最后將這些子列表合并以產生已排序的列表。基本概念包括: 分割:將列表分割成較小的子列表,直到子列表的長度為1或0。排序…

Leetcode—219.存在重復元素II【簡單】

2023每日刷題&#xff08;五十三&#xff09; Leetcode—219.存在重復元素II 實現代碼 class Solution { public:bool containsNearbyDuplicate(vector<int>& nums, int k) {unordered_map<int, int> m;int n nums.size();for(int i 0; i < n; i) {if(m…

vs的生成事件error MSB3073

生成事件設置位于&#xff1a;項目-》屬性-》生成事件&#xff1b; 生成事件有&#xff1a;生成前事件、鏈接前事件、生成后事件 以生成前事件為例&#xff1a;可以用于一些庫文件的配置 COPY ..\dll\*.* .\bin\ MKDIR .\bin\libx COPY ..\dll\libx\*.* .\bin\libx這里是在開…

[Decipher@mailfence.com].faust勒索病毒數據怎么處理|數據解密恢復

導言&#xff1a; 在數字世界的邊緣&#xff0c;[support2022cock.li].faust、[tsai.shenmailfence.com].faust、[Encrypteddmailfence.com].faust、[backupsairmail.cc].faust、[Deciphermailfence.com].faust勒索病毒如同黑暗的幽靈&#xff0c;威脅著我們珍貴的數字財產。本…

漏洞復現-大華dss struts2-045表達式注入漏洞(附漏洞檢測腳本)

免責聲明 文章中涉及的漏洞均已修復&#xff0c;敏感信息均已做打碼處理&#xff0c;文章僅做經驗分享用途&#xff0c;切勿當真&#xff0c;未授權的攻擊屬于非法行為&#xff01;文章中敏感信息均已做多層打馬處理。傳播、利用本文章所提供的信息而造成的任何直接或者間接的…

【webpack】初始化

webpack 舊項目的問題下一代構建工具 Vite 主角 &#xff1a;webpack安裝webpack1&#xff0c;mode的選項2&#xff0c;使用source map 精準定位錯誤行數3&#xff0c;使用watch mode(觀察模式)&#xff0c;自動運行4&#xff0c;使用webpack-dev-server工具&#xff0c;自動刷…

Linux_CentOS_7.9配置oracle sqlplus、rman實現上下按鍵切換歷史命令等便捷效率功能之簡易記錄

配置oracle sqlplus以及rman可以上下按鍵切換歷史命令等便捷效率功能 設置前提是已經yum安裝了rlwrap軟件具體軟件下載及配置參考文章http://t.csdnimg.cn/iXuVK su - oracleVim .bash_profile ## 文件中增加如下的別名設置 ---------------- alias sqlplusrlwrap sqlplus…

c++的算術生成算法

#include<numeric>//算術生成算法頭文件 要加的頭文件#include<numeric> accumulate 是 C 標準庫中的一個算法函數&#xff0c;用于計算給定范圍內的數值之和&#xff0c;它位于 <numeric> 頭文件中。它的函數原型如下&#xff1a; template <class In…

Matlab之帶時區的日期時間數據和不帶時區的日期時間數據相互轉換方法

使用datetime和datetimezone函數 通過使用datetime和datetimezone函數&#xff0c;可以將帶時區的日期時間數據轉換為不帶時區的數據&#xff0c;或者將不帶時區的日期時間數據轉換為帶時區的數據。這樣可以滿足坐標區的配置要求。 1、將帶時區的日期時間數據轉換為不帶時區的…

理解IoC容器初始化

問題&#xff1a;當自己面試或者背誦八股文時&#xff0c;會背到各種各樣的spring底層的東西&#xff0c;自己越看越迷糊。 OS&#xff1a;不知道兄弟們是不是也會這樣&#xff1f;如果大家沒有說明我太菜了。 原因&#xff1a;就是自己學的框架越來越多&#xff0c;很多框架…

?types --- 動態類型創建和內置類型名稱?

目錄 動態類型創建 標準解釋器類型 附加工具類和函數 協程工具函數 源代碼: Lib/types.py 此模塊定義了一些工具函數&#xff0c;用于協助動態創建新的類型。 它還為某些對象類型定義了名稱&#xff0c;這些名稱由標準 Python 解釋器所使用&#xff0c;但并不像內置的 int …

代碼規范及開發工具

代碼規范及開發工具&#xff1a; 前端&#xff08;vscode、idea&#xff09;: JavaScript規范&#xff1a; 1. 谷歌開源項目風格指南&#xff1a;JavaScript 、TypeScript篇 https://zh-google-styleguide.readthedocs.io/en/latest/google-typescript-…

P8625.生命之樹

求最大的子樹之和 維護包含當前節點的最大子樹之和就好了 #include<bits/stdc.h> using namespace std; using ll long long; const int N 1e610; ll w[N]; vector<int>g[N]; ll f[N]; ll res;ll dfs(int u,int father){f[u] w[u];for(auto &t:g[u]){if(tf…

2023.12.10 homework

五年級一元一次方程

C語言作業6

1.聯合體也會完全浪費空間 2.在結構體中 注意好偏移量和實際是第幾個的區別 那個對齊數是和偏移量有關的 (就用我之前的那個就行了) 3. 字節序 才有大小端

參數占位符#{}和${}

#是預處理而$是直接替換 Mybatis在處理#{}時&#xff0c;會將SQL中的#{}替換成占位符&#xff1f;&#xff0c;再使用preparedStatement的set方法來賦值。而Mybatis在處理 時&#xff0c;是將 {}時&#xff0c;是將 時&#xff0c;是將{}直接替換成變量的值 我們分別使用#{}和…

Redis AOF源碼解析

本文取3.0版本分析&#xff08;各個版本差異很大&#xff0c;4.0以上才有aof和rdb混合模式&#xff09; 觸發時機 1、bgrewriteaofCommand函數觸發&#xff0c;即在Redis server服務上運行bgrewriteaof命令。 1-1、當前已經有 AOF 重寫的子進程正在執行&#xff0c;重復執行bg…

JavaScript-Window對象

Window對象 BOM&#xff1a;瀏覽器對象模型 定時器-延時函數 JavaScript內置的一個用來讓代碼延遲執行的函數&#xff0c;setTimeout setTimeout(回調函數&#xff0c;等待的毫秒數);setTimeout僅僅只執行依次&#xff0c;所以可以理解為就是把一段代碼延遲執行&#xff0c…

網絡協議疑點記錄

1.RIP, OSPF,BGP 首先什么是自治系統:治系統就是幾個路由器組成了一個小團體 ?,小團體內部使用專用的協議進行通信,而小團體和小團體之間也使用專用的協議進行通信。 IGP RIP 距離矢量路由算法,bellman-ford算法,每個路由節點知道全局的路由信息,通過和鄰居交換信息得…

五.單行函數

單行函數 1.函數的理解1.1什么是函數1.2不同DBMS函數的差異1.3MySQL的內置函數分類 2.數值函數2.1基本函數2.2角度與弧度互換函數2.3三角函數2.4指數與對數2.5進制間的轉換 3.字符串函數4.日期和時間函數4.1獲取日期、時間4.2日期與時間戳的轉換4.3獲取月份、星期、星期數、天數…