【2021-10-12】CSDN开源广场-cookie和session

提前声明:该专栏涉及的所有案例均为学习使用,如有侵权,请联系本人删帖!

一、环境配置

  • 环境:python3.6
  • 开发工具:pycharm
  • 模块:requests

二、请求头中的cookie

我们使用Python的requests模块请求网站的一个接口时,通常需要携带headers模拟浏览器的正常请求。其中cookie是网站登录或者不登录下发的一个用户凭证。

在这里插入图片描述

但是对于一些网站,我们如果不登录,那么我们就无法请求进入网站内部的一些接口或页面,因此就需要登录,登录后下发的cookie就可以请求我们网站内部信息了。那么登录又分为两类情况:

  • 对于临时抓取或者登录后可以保持很长时间的情况,不需要模拟登录,直接copy那个cookie值
  • 需要程序模拟登陆的流程,然后自动获取cookie

在这里我们不进行模拟登陆,我们只简单使用一下cookie和session,先简单介绍一下cookie和session

1.cookie和session的区别

  • cookie在客户的浏览器上,session存在服务器上
  • cookie是不安全的,且有失效时间
  • session是在cookie的基础上,服务端设置session时会向浏览器发送设置一个设置cookie的请求,这个cookie包括session的id当访问服务端时带上这个session_id就可以获取到用户保存在服务端对应的session

2.爬虫处理cookie和session

  • 带上cookie和session的好处:能够请求到登录后的界面
  • 带上cookie和session的弊端:一个cookie和session往往和一个用户对应,访问太快容易被服务器检测出来爬虫
  • 不需要cookie的时候尽量不要用

三、cookie请求页面

网站:https://codechina.csdn.net/explore/welcome

进入网址后登录

在这里插入图片描述

因此我们需要手动登录后,然后看到已经有了cookie

在这里插入图片描述

在这里插入图片描述

因此我们直接在请求的时候携带自己的cookie,如果我们登陆后,可以看到自己的用户名

在这里插入图片描述

那么看一下代码

# -*- coding: utf-8 -*-
import requests

url = 'https://codechina.csdn.net/explore/welcome'
headers = {
    'Cookie': '...',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36'
}
# 请求,verify=False 跳过ssl验证
response = requests.get(url, headers=headers, verify=False)
response.encoding = 'utf-8'
if '不愿透露姓名の网友' in response.text:
    print('cookie有效')
else:
    print('cookie无效')


在这里插入图片描述

成功!

四、session请求页面

使用session的话,就是使用requests的session方式,他会记录请求携带的cookie状态

session = requests.Session()
url = 'https://codechina.csdn.net/explore/welcome'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36'
}
response = session.get(url, headers=headers, verify=False)
response.encoding = 'utf-8'
if '不愿透露姓名の网友' in response.text:
    print('cookie有效')
else:
    print('cookie无效')

在这里插入图片描述
然后我们塞入cookie,session中的cookie不能传入字符串,需要按键值对传入

session.cookie[key]=value

将字符串变成字段的方法

def cookie_to_dic(cookie_str):
    """将cookie字符串转为cookie字典"""
    dic = {}
    for i in cookie_str.split('; '):
        dic[i.split('=')[0]] = i.split('=')[1]
    return dic

放入一个登录的cookie
在这里插入图片描述
在这里插入图片描述
然后再使用该session访问其他的页面,可以直接访问成功
在这里插入图片描述
在这里插入图片描述

简单写下代码

# -*- coding: utf-8 -*-
import requests


def cookie_to_dic(cookie_str):
    """将cookie字符串转为cookie字典"""
    dic = {}
    for i in cookie_str.split('; '):
        dic[i.split('=')[0]] = i.split('=')[1]
    return dic


# 不放入cookie
session = requests.Session()
url = 'https://codechina.csdn.net/explore/welcome'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36'
}
response = session.get(url, headers=headers, verify=False)
response.encoding = 'utf-8'
if '不愿透露姓名の网友' in response.text:
    print('cookie有效')
else:
    print('cookie无效')

# 放入cookie
cookie_str = '...'
cookie_dict = cookie_to_dic(cookie_str)

for key, value in cookie_dict.items():
    session.cookies[key] = value
response = session.get(url, headers=headers, verify=False)
response.encoding = 'utf-8'
if '不愿透露姓名の网友' in response.text:
    print('cookie有效')
else:
    print('cookie无效')

# 访问新页面
url_2 = 'https://codechina.csdn.net/courses'
response_2 = session.get(url)
response_2.encoding = 'utf-8'
if '不愿透露姓名の网友' in response_2.text:
    print('cookie有效')
else:
    print('cookie无效')

在这里插入图片描述
成功

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张烫麻辣亮。

谢谢老板支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值