第2篇-csdn开源广场中的session登录

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

一、前言

在这里插入图片描述

在上篇文章中,我们手动登录csdn的开源广场网站(传送门:https://blog.csdn.net/qq_40558166/article/details/120723759),抠取了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的时候尽量不要用

3.session请求方式
request提供了一个一个叫做session的类,来实现客户端和服务端的会话保持
使用方法:

  1. 实例化一个session对象
  2. 让session发送get或post请求
  3. 再使用session访问只有登录之后才能访问的网站,这时候session会自动带上服务器保存在其中的信息进行访问
session=request.session() #实例化session对象
response=session.get(url,header) #使用session对象发送get请求 就能获取服务端设置的session对象

三、代码分析

首先我们拿过上次的代码,开始改造

# -*- 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无效')

首先我们不使用cookie登录,我们使用session进行请求

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无效')

在这里插入图片描述
成功
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

张烫麻辣亮。

谢谢老板支持!

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

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

打赏作者

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

抵扣说明:

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

余额充值