Cookie

一、什么是cookie?

  • cookie的本质就是一组数据(键值对的形式存在)
  • 是由服务器创建,返回给客户端,最终会保存在客户端浏览器中。
  • 如果客户端保存了cookie,则下次再次访问该服务器,就会携带cookie进行网络访问。
    • 典型的案例:网站的免密登录

二、Cookie的玩法

1、构建服务器

# server.py
from flask import Flask, request, make_response, render_template
import json app = Flask(__name__, template_folder="temps") COOKIE = "sadfnwejfnfcvxwerw213kbnkj2k3j23234jk2k" @app.route("/login")
def login():
return render_template("login.html") @app.route("/auth", methods=['POST'])
def auth():
user = request.form.get("user")
pwd = request.form.get("pwd")
if user == "yuan" and pwd == "123":
# 设置响应体
resp = make_response("登录成功")
resp.set_cookie("cookie", COOKIE)
return resp
else:
print("OK")
return "登录失败!" @app.route("/")
def index():
return render_template("index.html") @app.route("/books")
def books():
print(request.cookies.get("cookie"))
if request.cookies.get("cookie") == COOKIE: data = ["西游记", "三国演义", "水浒传", "大话西游"]
return json.dumps(data, ensure_ascii=False)
else:
return "认证失败,请重新登录!" if __name__ == '__main__':
app.run() # 默认端口号

2、构建index页面

# index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.js"></script>
</head>
<body> <h1>四大名著</h1>
<p class="content"></p> <script>
$.ajax({
url: "/books",
success: function (res) {
console.log(res)
$(".content").html(res)
}
})
</script>
</body>
</html>

3、爬虫的cookie应用

# 请求cookie
requests.get(url="", headers={}, cookies={})
# 响应cookie
print(respone.cookies)
print(respone.cookies.get_dict())
print(respone.cookies.items())
import requests

headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36',
} # 获取从服务器端响应的cookie
url = 'https://xueqiu.com/'
res = requests.get(url, headers=headers)
cookies = dict(res.cookies)
url = 'https://stock.xueqiu.com/v5/stock/batch/quote.json?symbol=SH000001,SZ399001,SZ399006,SH000688,SH000016,SH000300,BJ899050,HKHSI,HKHSCEI,HKHSTECH,.DJI,.IXIC,.INX'
res = requests.get(url, headers=headers, cookies=cookies)
# print(res.json())
print(res.content.decode())

三、爬取雪球网中的咨询数据

  • url:https://xueqiu.com/,需求就是爬取热帖内容

  • 经过分析发现帖子的内容是通过ajax动态加载出来的,因此通过抓包工具,定位到ajax请求的数据包,从数据包中提取:

    • url:https://xueqiu.com/statuses/hot/listV2.json?since_id=-1&max_id=311519&size=15

    • 请求方式:get

    • 请求参数:拼接在了url后面

      import requests
      import os
      headers = {
      'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36',
      }
      url = 'https://xueqiu.com/statuses/hot/listV2.json'
      param = {
      "since_id": "-1",
      "max_id": "311519",
      "size": "15",
      }
      response = requests.get(url=url,headers=headers,params=param)
      data = response.json()
      print(data)
      #发现没有拿到我们想要的数据
      • 分析why?

        • 切记:只要爬虫拿不到你想要的数据,唯一的原因是爬虫程序模拟浏览器的力度不够!一般来讲,模拟的力度重点放置在请求头中!
        • 上述案例,只需要在请求头headers中添加cookie即可!
      • 爬虫中cookie的处理方式(两种方式之cookie):

        • 手动处理:将抓包工具中的cookie赋值到headers中即可

          • 缺点:

            • 编写麻烦
            • cookie通常都会存在有效时长
            • cookie中可能会存在实时变化的局部数据

Session

1、什么是session

  • session对象:该对象和requests模块用法几乎一致.如果在请求的过程中产生了cookie,如果该请求使用session发起的,则cookie会被自动存储到session中.
  • session 对象
import requests

headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36',
} # 获取从服务器端响应的cookie
url = 'https://xueqiu.com/'
session = requests.session()
session.get(url, headers=headers)
url = 'https://stock.xueqiu.com/v5/stock/batch/quote.json?symbol=SH000001,SZ399001,SZ399006,SH000688,SH000016,SH000300,BJ899050,HKHSI,HKHSCEI,HKHSTECH,.DJI,.IXIC,.INX'
res = session.get(url, headers=headers)
print(res.json())

2、爬虫中cookie的处理方式(两种方式之session):

  • 自动处理

    • 基于session对象实现自动处理cookie。

      • 1.创建一个空白的session对象。
      • 2.需要使用session对象发起请求,请求的目的是为了捕获cookie
        • 注意:如果session对象在发请求的过程中,服务器端产生了cookie,则cookie会自动存储在session对象中。
      • 3.使用携带cookie的session对象,对目的网址发起请求,就可以实现携带cookie的请求发送,从而获取想要的数据。
    • 注意:session对象至少需要发起两次请求

      • 第一次请求的目的是为了捕获存储cookie到session对象

      • 后次的请求,就是携带cookie发起的请求了

        import requests
        #1.创建一个空白的session对象
        session = requests.Session() headers = {
        'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36',
        }
        main_url = 'https://xueqiu.com/'
        #2.使用session发起的请求,目的是为了捕获到cookie,且将其存储到session对象中
        session.get(url=main_url,headers=headers) url = 'https://xueqiu.com/statuses/hot/listV2.json'
        param = {
        "since_id": "-1",
        "max_id": "311519",
        "size": "15",
        }
        #3.就是使用携带了cookie的session对象发起的请求(就是携带者cookie发起的请求)
        response = session.get(url=url,headers=headers,params=param)
        data = response.json()
        print(data)

Day 13 13.3 Cookie与Session的更多相关文章

  1. 13 Django组件-cookie与session

    会话跟踪技术 1 什么是会话跟踪技术 我们需要先了解一下什么是会话!可以把会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应.例如你给10086打个电话,你就是客户端,而10 ...

  2. 【转】Cookie和Session区别和联系详解

    会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端 ...

  3. Django实现表单验证、CSRF、cookie和session、缓存、数据库多表操作(双下划綫)

    通常验证用户输入是否合法的话,是前端js和后端共同验证的,这是因为前端js是可以被禁用的,假如被禁用了,那就没法用js实现验证合法与否了,也就是即使用户输入的不合法,但是也没提示,用户也不知道怎么输入 ...

  4. Django之Form、CSRF、cookie和session

    Django是一个大而全的web框架,为我们提供了很多实用的功能,本文主要介绍Form.CSRF.cookie和session 一.Form 在web页面中form表单是重要的组成部分,为了数据安全和 ...

  5. 关于cookie的文章(cookie与session机制)

    会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端 ...

  6. python_way day19 HTML-day5 (form表单验证,CSRF,cookie,session,缓存)

    python-way day19 1. dJango的form表单验证 2.CSRF 跨站请求伪造 3.cookie,session 4.缓存 一,django表单验证功能 1.django验证基础: ...

  7. Magento怎么设置和使用Cookie和Session?

    Magento中cookie和session是已经封装了的 Magento的核心对象-Mage_Core_Model_Cookie & Mage_Core_Model_Session Mage ...

  8. Day19 Django之Form表单验证、CSRF、Cookie、Session和Model操作

    一.Form表单验证 用于做用户提交数据的验证1.自定义规则 a.自定义规则(类,字段名==html中的name值)b.数据提交-规则进行匹配代码如下: """day19 ...

  9. cookie 和 session

    会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端 ...

  10. 程序中的Cookie 和Session

    这几天回家休息后,想想放假之前的几天,主要看的一些工作上的东西,发现对Session和Cookie这两个东西,我还是很陌生.恩,趁着有网,看了点相关的资料,打算整理下.一翻博客,发现已经有前辈已经对这 ...

随机推荐

  1. Jmeter 之吞吐量控制器

    作用: 吞吐量控制器可用来模拟混合场景的压测业务,即一部分用户执行场景A,一部分用户执行场景B 字段说明: Total Excutions:执行请求总数 Percent Excutions:执行线程数 ...

  2. VmWare安装Centos后配置Net网络SSH链接问题看这一遍就够了

    1:首先安装VmWare 2:启动时在安装对应的Linux版本,网络就默认 net即可 3:都安装好了之后,注意有一个大坑,输入的账号密码都不能准确登录 最后发现是linux默认的输入法没有启用电脑键 ...

  3. prometheus-添加监控linux服务器

    1. prometheus-添加监控linux服务器 prometheus添加监控linux服务器 node_exporter:用于监控Linux系统的指标采集器. 常用指标: CPU 内存 硬盘 网 ...

  4. [OpenCV实战]21 使用OpenCV的Eigenface

    目录 1 PCA 1.1 方差是什么 1.2 什么是PCA 1.3 什么是矩阵的特征向量和特征值? 1.4 如何计算PCA 2 什么是EigenFaces? 2.1 将图像作为向量 2.2 如何计算如 ...

  5. centos更新glibc-2.28

    vps安装alist时提示glibc版本太老,找了一圈教程,就这个解决了问题. 原文: https://www.cnblogs.com/FengZeng666/p/15989106.html

  6. 看我是如何用C#编写一个小于8KB的贪吃蛇游戏的

    译者注:这是Michal Strehovský大佬的一篇文章,他目前在微软.NET Runtime团队工作,主要是负责.NET NativeAOT功能的开发.我在前几天看到这篇文章,非常喜欢,虽然它的 ...

  7. Redis--回顾提要

    一.写在前 知识学了就忘!不用就忘!我太健忘!特此记录!用于复习打卡!Redis干就完事了! 二.来辣! Redis做异步队列:一般list结构做队列,rpush生产消息,lpop消费消息,当lpop ...

  8. 图文并茂Windows系统使用XAMPP搭建本地mysql数据库导入数据库并使用node.js访问数据库

    点击下载XAMPP 点击启动Apache和Mysql 如果出现这种报错,修改配置文件,一般出现这种情况是因为端口占用 再次尝试START, 成功啦~~ 接下来我们准备一份写好的SQL 文件 输入如下命 ...

  9. Python3+Selenium3自动化测试-(六)

    这里来说一说selenium中的等待方式,其实在webdriver只有两种类型等待方式,显式等待和隐式等待,之前是在程序运行过程中使用time模块中的sleep进行代码的休眠进行强制等待,是显式等待中 ...

  10. 在Spring Boot中整合Katharsis,来快速开发JSON API的Web应用

    1 简介 我们进行Web API开发的时候,经常会使用Json格式的消息体,而Json格式非常灵活,不同的人会有不同的设计风格和实现,而JSON API提供了一套标准.但它并不提供直接实现. Kath ...