四:爬虫-Cookie与Session实战

news/2024/7/19 11:00:19 标签: 爬虫, 12306查票示例

四: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 requests

headers = {
    "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.niftyadmin.cn/n/5251605.html

相关文章

六级高频词汇1

目录 高频词汇 参考连接 高频词汇 1. alter v. 改变,改动,变更 2. burst vi. n. 突然发生,爆裂 3. dispose vi. 除掉;处置;解决;处理(of) 4. blast n. 爆炸;气流 vi. 炸,炸掉 …

document load 和 document ready 有什么区别

document load 和 document ready 是两个不同的事件,用于监听页面加载完成的时机。它们在不同的情况下触发 document load:load 事件在整个页面及其所有资源(如图片、样式表等)完全加载后触发。这包括页面中的所有内容和依赖文件的…

〖大前端 - 基础入门三大核心之JS篇㊾〗- 面向对象之认识对象

说明:该文属于 大前端全栈架构白宝书专栏,目前阶段免费,如需要项目实战或者是体系化资源,文末名片加V!作者:哈哥撩编程,十余年工作经验, 从事过全栈研发、产品经理等工作,目前在公司…

前端入门:HTML初级指南,网页的简单实现!

代码部分&#xff1a; <!DOCTYPE html> <!-- 上方为DOCTYPE声明&#xff0c;指定文档类型为HTML --> <html lang"en"> <!-- html标签为整个页面的根元素 --> <head> <!-- title标签用于定义文档标题 --> <title>初始HT…

[报错]记录IDEA远程开发报错:java: Cannot run program.....

报错内容 IDEA在进行远程开发的时候报错&#xff0c;内容如下&#xff1a; java: Cannot run program "/usr/lib/jvm/java-1.8.0-openjdk-amd64/bin/java" (in directory "/home/jim/.cache/JetBrains/RemoteDev-IU/_home_jim_DevCodes_Github_zfile/compile-…

排序算法之五:堆排序

堆排序 堆排序(Heapsort)是指利用堆积树&#xff08;堆&#xff09;这种数据结构所设计的一种排序算法&#xff0c;它是选择排序的一种。它是通过堆来进行选择数据 需要注意的是排升序要建大堆&#xff0c;排降序建小堆 堆排序的动图演示&#xff1a; https://vdn3.vzuu.c…

LANDSAT_7/02/T1/TOA的Landsat7_C2_TOA类数据集

Landsat7_C2_TOA数据集是将数据每个波段的辐射亮度值转换为大气层顶表观反射率TOA&#xff0c;是飞行在大气层之外的航天传感器量测的反射率&#xff0c;包括了云层、气溶胶和气体的贡献&#xff0c;可通过辐射亮度定标参数、太阳辐照度、太阳高度角和成像时间等几个参数计算得…

红队专题-开源资产扫描系统-ARL资产灯塔系统

ARL资产灯塔系统 安装说明问题 &#xff1a;漏洞监控 安装说明 源码地址 https://github.com/TophantTechnology/ARL https://github.com/TophantTechnology/ARL/wiki/Docker-%E7%8E%AF%E5%A2%83%E5%AE%89%E8%A3%85-ARL 安装环境 uname -a Linux VM-24-12-centos 3.10.0-116…