四:爬虫-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.rhkb.cn/news/213954.html

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

相关文章

STM32 USB串口通信实例

✅作者简介:热爱科研的嵌入式开发者,修心和技术同步精进, 代码获取、问题探讨及文章转载可私信。 ☁ 愿你的生命中有够多的云翳,来造就一个美丽的黄昏。 🍎获取更多嵌入式资料可点击链接进群领取,谢谢支持!…

Spring Cloud Gateway 网关的基础使用

1. 什么是网关?网关有什么用? 在微服务架构中,网关就是一个提供统一访问地址的组件,它解决了内部微服务与外部的交互问题。网关主要负责流量的路由和转发,将外部请求引到对应的微服务实例上。同时提供身份认证、授权、…

在eclipse中安装python插件:PyDev

在eclipse中安装插件PyDev,就可以在eclipse中开发python了。 PyDev的官网:https://www.pydev.org/ 不过可以直接在eclipse中用Marketplace安装(备注:有可能一次安装不成功,是因为下载太慢了,多试几次&…

C++中STL的容器vector

文章目录 什么是vectorvector与普通顺序表不同的点 vector的成员函数operatoroperator[]begin与end与iteratorsize()capacityresizeemptyreservepush_backpop_backinserteraseswapclear成员变量 总结 什么是vector vector:是数据结构里面的顺序表,开辟一…

Dockerfile文件

什么是dockerfile? Dockerfile是一个包含用于组合映像的命令的文本文档。可以使用在命令行中调用任何命令。 Docker通过读取Dockerfile中的指令自动生成映像。 docker build命令用于从Dockerfile构建映像。可以在docker build命令中使用-f标志指向文件系统中任何位置的Docke…

swing快速入门(二)

注释很详细,直接上代码 上一篇 新增内容 1. ScrollPane对象(滚动面板容器) 2. 布局管理器的影响 import java.awt.*;public class swing_test_1{public static void main(String[] args){//1.创建一个窗口对象(windows容器&am…

VoxPoser:使用语言模型进行机器人操作的可组合 3D 值图

语言是一种压缩媒介,人们通过它来提炼和传达他们对世界的知识和经验。大型语言模型(LLMs)已成为一种有前景的方法,通过将世界投影到语言空间中来捕捉这种抽象。虽然这些模型被认为在文本形式中内化了可概括的知识,但如…

【calcitonin ; 降钙素 ;降钙素原】

Parathyroid_Hormone -甲状旁腺激素 PTH ; 特立帕肽;

Jupyter notebook修改背景主题

打开Anaconda Prompt,输入以下内容 1. pip install --upgrade jupyterthemes 下载对应背景主题包 出现Successfully installed jupyterthemes-0.20.0 lesscpy-0.15.1时,说明已经下载安装完成 2. jt -l 查看背景主题列表 3. jt -t 主题名称(…

CSS新手入门笔记整理:CSS浮动布局

文档流概述 正常文档流 “文档流”指元素在页面中出现的先后顺序。正常文档流,又称为“普通文档流”或“普通流”,也就是W3C标准所说的“normal flow”。正常文档流,将一个页面从上到下分为一行一行,其中块元素独占一行&#xf…

冒泡排序和直接选择排序(C/C++实现)

文章目录 冒泡排序(交换排序)基本思想特性总结代码实现 直接选择排序基本思想特性总结代码实现(优化,每次循环同时选择最小和最大的数) 冒泡排序(交换排序) 基本思想 基本思想:所谓交换,就是根…

Qt之QGraphicsView —— 笔记1:绘制简单图元(附完整源码)

效果 相关类介绍 QGraphicsView类提供了一个小部件,用于显示QGraphicsScene的内容。QGraphicsView在可滚动视口中可视化。QGraphicsView将滚动其视口,以确保该点在视图中居中。 QGraphicsScene类 提供了一个用于管理大量二维图形项的场景。请注意,QGraphicsScene没有自己的视…

Tomcat部署开源站点JPress

前言 JPress使用Java开发,是我们常见的开源博客系统。JPress是一个开源的WordPress插件,它提供了一个简单而强大的方式来创建企业级站点。该插件包括许多特性,例如主题定制、页面构建器、性能优化、SEO、安全、电子商务和社交媒体整合等。使用…

unity Mesh Simplify 1.10(模型优化工具:查看面数,降低面数灯)

提示:文章有错误的地方,还望诸位大神不吝指教! 文章目录 前言一、面板参数详解说明二、使用方法总结 前言 有时候想对模型优化一下,奈何又不会建模方面的。虽然我感觉它的数值不大对,但是不影响我们优化顶点数嘛。 Me…

国产Type-C PD芯片—接口快充取电芯片

常用USB PDTYPE-C受电端,即设备端协议IC芯片(PD Sink,也叫PD诱骗芯片),诱导取电芯片。 产品介绍 LDR6328: ◇ 采用 SOP-8 封装 ◇ 兼容 USB PD 3.0 规范,支持 USB PD 2.0 ◇ 兼容 QC 3.0 规范&#x…

Windows11安装使用Oracle21C详细步骤<图文保姆级>新版本

Windows11安装使用Oracle21C详细步骤<图文保姆级>新版本 Database Software Downloads | Oracle 中国 下载完成后解压缩 双击setup.exe 打开安装页面 同意下一步 更改自己的路径点击下一步 输入密码 下一步安装等待即可 等待加载配置时间有点久 完成即可 使用 搜索…

查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息

文章目录 摘要1. 查询CPU使用率命令&#xff1a;top -bn1 | grep \"Cpu(s)\" | awk {split($0,arr,\" \");print 100-arr[8]}2. 查询内存命令&#xff08;单位&#xff1a;G&#xff09;&#xff1a;top -bn1 | grep \"KiB Mem\" | awk {split($…

12.8 作业 C++

使用手动连接&#xff0c;将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在自定义的槽函数中调用关闭函数 将登录按钮使用qt5版本的连接到自定义的槽函数中&#xff0c;在槽函数中判断ui界面上输入的账号是否为"admin"&#xff0c;密码是否为…

【Linux】如何对文本文件进行有条件地划分?——cut命令

cut 命令可以根据一个指定的标记&#xff08;默认是 tab&#xff09;来为文本划分列&#xff0c;然后将此列显示。 例如想要显示 passwd 文件的第一列可以使用以下命令&#xff1a;cut –f 1 –d : /etc/passwd cut&#xff1a;用于从文件的每一行中提取部分内容的命令。-f 1&…