四:爬虫-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.mzph.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获取月份、星期、星期数、天数…