爬虫之cookie和session的应用

爬虫之cookie和session的应用

一:Cookie和Session的简介

  1. 为什么使用Cookie和Session

​ http是一种无状态协议,每个请求都是完全独立的,客户端请求时服务器无法确认当前访问者的身份,服务器和浏览器为了进行会话的跟踪,必须主动去维护一个状态(告诉服务器前后两个请求是否是来自同一个浏览器)。这个状态需要通cookie和session来实现(通俗理解就是免去了每次登录都需要输入帐号密码的繁琐过程)。

  1. Cookie

​ cookie是客户端请求服务器时,服务器向客户端下放的一串值(所以我们在设置cookie时需要要用response对象进行设置)。cookie是以字典的形式存在的,并保存在客户端(这是cookie的一个重点)。当客户端下一次访问服务器时会在请求中加入这个cookie,服务端收到请求后只需要通过校验cookie去验证用户的身份,而不是通过帐号和密码验证。

​ cookie缺点:由上可见,cookie是非常方便的,但由于cookie是保存在本地中的,所以它的安全性就成为了它的最大一个隐患。seesion则可以弥补这个缺陷

  1. Session

session是区别cookie的另一种记录服务器和客户端会话状态的机制,session是基于cookie实现的。session是存储在服务器中的(区别于cookie的一大特点)。用户第一次请求服务器时,服务器会生成一个加密的sessionid放在cookie之中下发到客户端,客户端下一次访问服务器时,会携带这个sessionid到服务器,服务器拿到sessionid后进行解密,并与服务器内的session进行匹配来验证当前用户。

​ 由于session是保存在服务器中的,故使得安全性得到了极大的提升。

  1. cookie和session区别:

    (1). 存储位置不同

    • cookie存储在本地浏览器(客户端),session存在服务器上

    (2). 存储容量不同

    • 没一个cookie保存的数据不超过4kb,每个站点不超过20个cookie
    • session没有容量上限,但是session存在服务器上,如果存太多的session对服务器压力很大

    (3). 安全性不同

    • session比cookie更加安全
  2. Token(令牌)

    token是访问接口时所需要的资源凭证

    常见的token是由三部分组成:UID,time(时间戳),sign(签名,加密数据)

    验证流程:客户端将帐号密码提交到服务器后,服务器对请求的帐号密码进行加密,并返回Token给客户端,下一次客户端登录时,请求中会携带token,服务端对token进行解密,进行验证并判断正确性,如果正确则返回数据。

  3. cookie和session在爬虫中的应用

    案例一:cookie的使用

# 需求:利用cookie爬取已登录的csdn首页

import requests

# 定义请求头
headers = {
    "User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:83.0) Gecko/20100101 Firefox/83.0",  
    "Cookie": "Cookie值"  # cookie值可从浏览器中获取
}

# 若不加cookie,则无法获取完整的页面
response = requests.get(
    url="https://i.csdn.net/#/uc/profile",
    headers=headers,
)

# 保存文件
with open("csdn.html", "w", encoding="utf8") as f:
    f.write(response.text)

​ 案例二:session的使用

# 需求:用session爬出csdn登录页面
  2 
  3 import requests
  4 
  5 
  6 # 创建session对象
  7 ss = requests.session()
  8 
  9 # 使用session对象发起请求
 10 # 确定请求的url:是form表单的action属性的值
 11 # 确定请求的方式:是form表单中method属性的值
 12 
 13 # 定义参数
 14 # 参数的键值对是<input>标签内的name属性的值和自己的帐号密码
 15 data = {
 16     "all": "帐号",
 17     "pwd": "密码"
 18 }
 19 
 20 response = requests.get(
 # 		# 为form表单的action属性的值,即表单的提交地址
 21     url="https://passport.csdn.net/login?code=public",
 22     data=data
 23 )
 24 
 25 with open("csdn_session.html","w",encoding="utf8") as f:
 26     f.write(response.text)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值