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

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

文章目录

  • 一、环境配置
  • 二、请求头中的cookie
  • 三、cookie请求页面
  • 四、session请求页面

一、环境配置

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

二、请求头中的cookie

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

【2021-10-12】CSDN开源广场-cookie和session_第1张图片

但是对于一些网站,我们如果不登录,那么我们就无法请求进入网站内部的一些接口或页面,因此就需要登录,登录后下发的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

进入网址后登录

【2021-10-12】CSDN开源广场-cookie和session_第2张图片

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

【2021-10-12】CSDN开源广场-cookie和session_第3张图片

【2021-10-12】CSDN开源广场-cookie和session_第4张图片

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

【2021-10-12】CSDN开源广场-cookie和session_第5张图片

那么看一下代码

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

【2021-10-12】CSDN开源广场-cookie和session_第6张图片
然后我们塞入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
【2021-10-12】CSDN开源广场-cookie和session_第7张图片
【2021-10-12】CSDN开源广场-cookie和session_第8张图片
然后再使用该session访问其他的页面,可以直接访问成功
【2021-10-12】CSDN开源广场-cookie和session_第9张图片
【2021-10-12】CSDN开源广场-cookie和session_第10张图片

简单写下代码

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

【2021-10-12】CSDN开源广场-cookie和session_第11张图片
成功

你可能感兴趣的:(python,爬虫)