首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >使用 requests 库处理爱奇艺 Cookie 与 Session 管理

使用 requests 库处理爱奇艺 Cookie 与 Session 管理

原创
作者头像
小白学大数据
发布2026-01-16 16:13:11
发布2026-01-16 16:13:11
840
举报

一、核心概念解析:Cookie 与 Session 的区别与关联

在进行具体实操前,我们需要先厘清 Cookie 与 Session 的核心差异,这是理解后续操作的基础:

  1. Cookie:存储在客户端(本地浏览器 / 程序运行环境)的小型文本数据,由服务器响应时下发,后续客户端向同一服务器发送请求时,会自动携带对应的 Cookie 数据。其核心作用是记录客户端身份信息、保持登录状态,爱奇艺的 Cookie 中会包含P00001(用户核心认证标识)、QC005(设备标识)等关键字段,是验证用户身份的核心凭证。Cookie 有过期时间限制,分为会话级 Cookie(关闭客户端即失效)和持久化 Cookie(存储在本地文件,过期时间由服务器指定)。
  2. Session:存储在服务器端的会话数据,服务器会为每个新会话分配唯一的 Session ID,该 ID 会通过 Cookie 下发给客户端。客户端后续请求携带包含 Session ID 的 Cookie,服务器即可通过该 ID 找到对应的会话数据,从而识别用户身份、保持会话状态。
  3. 核心关联:Session 的实现依赖 Cookie(用于传递 Session ID),而requests库中的Session对象则是对 HTTP 会话的封装,能够自动维护会话过程中的 Cookie 信息,无需手动每次请求都添加 Cookie,极大简化了多请求连续操作的流程。

对于爱奇艺操作而言,我们无需关心服务器端 Session 的具体实现,只需通过requests库维护好客户端的 Cookie 信息,即可实现持久化的会话访问。

二、requests 库核心工具:Cookie 处理与 Session 对象

2.1 手动处理 Cookie:requests.get/post 的 cookies 参数

requests库的基础get()post()方法支持通过cookies参数手动传入 Cookie 数据,该参数接收一个dict类型(字典)数据,键为 Cookie 字段名,值为 Cookie 字段对应的值。

示例语法:

代码语言:javascript
复制
import requests

# 构造Cookie字典
cookie_dict = {
    "Cookie字段1": "字段1对应值",
    "Cookie字段2": "字段2对应值"
}

# 携带Cookie发送请求
response = requests.get(url="目标接口地址", cookies=cookie_dict)

这种方式适用于单次请求或 Cookie 数据固定不变的场景,但缺点明显:多请求场景下需要重复传递 Cookie 字典,Cookie 更新后无法自动同步,灵活性较差,不适合爱奇艺多接口连续操作的场景。

2.2 自动维护 Cookie:requests.Session () 对象

requests库提供的Session对象是处理会话持久化的核心,其核心优势是在同一个 Session 实例发起的所有请求中,会自动维护 Cookie 信息—— 第一次请求获取到服务器下发的 Cookie 后,会自动存储在 Session 对象中,后续所有请求都会自动携带这些 Cookie,无需手动干预,完美适配爱奇艺的连续操作场景。

Session对象的核心使用流程:

  1. 实例化Session对象,创建一个会话实例;
  2. 通过该会话实例发起get()post()等请求;
  3. 会话实例自动维护 Cookie,后续请求无需手动携带;
  4. 可通过session.cookies查看当前会话中存储的 Cookie 信息。

核心语法:

python

运行

代码语言:javascript
复制
import requests

# 1. 实例化Session对象
session = requests.Session()

# 2. 发起第一次请求,Session自动存储返回的Cookie
response1 = session.get(url="爱奇艺初始化接口")

# 3. 发起后续请求,自动携带已存储的Cookie
response2 = session.get(url="爱奇艺用户信息接口")

# 4. 查看当前会话的Cookie信息
print("当前会话Cookie:", session.cookies)

三、实操落地:爱奇艺 Cookie 与 Session 管理完整实现

3.1 前期准备

  1. 环境配置:安装requests库(若未安装)
  2. 获取爱奇艺有效 Cookie:
    • 打开浏览器,访问爱奇艺官网并完成登录;
    • 打开浏览器开发者工具(F12),切换至「Network」标签,刷新页面;
    • 找到任意一个向iqiyi.com发送的请求,切换至「Request Headers」,复制Cookie字段后的完整内容(这是后续操作的核心凭证)。

3.2 方案 1:手动携带 Cookie 请求爱奇艺用户信息

该方案适用于单次请求场景,手动解析 Cookie 字符串为字典,通过cookies参数传入请求。

完整代码:

python

运行

代码语言:javascript
复制
import requests
from typing import Dict

def parse_cookie_str(cookie_str: str) -> Dict[str, str]:
    """
    解析浏览器复制的Cookie字符串为字典格式
    :param cookie_str: 浏览器复制的完整Cookie字符串
    :return: 格式化后的Cookie字典
    """
    cookie_dict = {}
    # 按分号分割Cookie字段
    cookie_items = cookie_str.split("; ")
    for item in cookie_items:
        if "=" in item:
            key, value = item.split("=", 1)  # 按第一个等号分割,避免值中包含等号
            cookie_dict[key] = value
    return cookie_dict

def get_iqiyi_user_info_manual(cookie_str: str):
    """
    手动携带Cookie请求爱奇艺用户信息
    """
    # 1. 配置请求参数
    url = "https://www.iqiyi.com/apis/user/userinfo.action"  # 爱奇艺用户信息接口
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
        "Referer": "https://www.iqiyi.com/",
        "Accept": "application/json, text/plain, */*"
    }
    
    # 2. 解析Cookie字符串为字典
    cookie_dict = parse_cookie_str(cookie_str)
    
    try:
        # 3. 手动携带Cookie发送GET请求
        response = requests.get(
            url=url,
            headers=headers,
            cookies=cookie_dict,
            timeout=10
        )
        
        # 4. 响应结果处理
        response.raise_for_status()  # 抛出HTTP请求异常(4xx/5xx)
        result = response.json()
        print("手动携带Cookie请求成功!")
        print(f"用户昵称:{result.get('data', {}).get('nickname', '未知')}")
        print(f"用户ID:{result.get('data', {}).get('userId', '未知')}")
        print(f"VIP状态:{result.get('data', {}).get('vipInfo', {}).get('isVip', '未知')}")
    except requests.exceptions.RequestException as e:
        print(f"手动请求失败:{e}")
    except Exception as e:
        print(f"数据解析失败:{e}")

# 主程序执行
if __name__ == "__main__":
    # 替换为你从浏览器复制的爱奇艺Cookie字符串
    IQIYI_COOKIE = "你的爱奇艺Cookie完整字符串(从浏览器复制)"
    get_iqiyi_user_info_manual(IQIYI_COOKIE)

3.3 方案 2:Session 对象自动维护 Cookie,实现多接口连续操作

该方案是更推荐的实战方案,通过Session对象自动维护 Cookie,可实现登录态保持下的多接口连续请求。

完整代码:

代码语言:javascript
复制
import requests
from typing import Dict

def parse_cookie_str(cookie_str: str) -> Dict[str, str]:
    """
    解析浏览器复制的Cookie字符串为字典格式
    :param cookie_str: 浏览器复制的完整Cookie字符串
    :return: 格式化后的Cookie字典
    """
    cookie_dict = {}
    cookie_items = cookie_str.split("; ")
    for item in cookie_items:
        if "=" in item:
            key, value = item.split("=", 1)
            cookie_dict[key] = value
    return cookie_dict

def get_iqiyi_data_with_session(cookie_str: str):
    """
    使用Session对象自动维护Cookie,实现爱奇艺多接口连续请求
    """
    # 1. 配置公共请求头
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
        "Referer": "https://www.iqiyi.com/",
        "Accept": "application/json, text/plain, */*"
    }
    
    # 2. 实例化Session对象
    session = requests.Session()
    
    # 3. 向Session对象注入初始Cookie(从浏览器复制的有效Cookie)
    cookie_dict = parse_cookie_str(cookie_str)
    # 将Cookie字典更新到Session中,后续请求自动携带
    session.cookies.update(cookie_dict)
    
    # 4. 配置多接口请求地址
    urls = {
        "user_info": "https://www.iqiyi.com/apis/user/userinfo.action",
        "vip_record": "https://www.iqiyi.com/apis/vip/record/history.action"
    }
    
    try:
        # 5. 第一个请求:获取用户基本信息(Session自动携带Cookie)
        print("===== 正在请求用户基本信息 =====")
        user_response = session.get(
            url=urls["user_info"],
            headers=headers,
            timeout=10
        )
        user_response.raise_for_status()
        user_result = user_response.json()
        user_data = user_result.get("data", {})
        print(f"用户昵称:{user_data.get('nickname', '未知')}")
        print(f"用户ID:{user_data.get('userId', '未知')}")
        print(f"VIP等级:{user_data.get('vipInfo', {}).get('vipLevel', '未知')}")
        
        # 6. 第二个请求:获取用户VIP观影记录(Session自动维护Cookie,无需重新注入)
        print("\n===== 正在请求用户VIP观影记录 =====")
        vip_response = session.get(
            url=urls["vip_record"],
            headers=headers,
            params={"pageNum": 1, "pageSize": 10},  # 分页参数:第1页,每页10条
            timeout=10
        )
        vip_response.raise_for_status()
        vip_result = vip_response.json()
        vip_records = vip_result.get("data", {}).get("list", [])
        
        if vip_records:
            print(f"最近10条观影记录:")
            for index, record in enumerate(vip_records, 1):
                title = record.get("title", "未知视频")
                watch_time = record.get("watchTime", "未知时间")
                print(f"{index}. 视频标题:{title} | 观看时间:{watch_time}")
        else:
            print("暂无VIP观影记录")
        
        # 7. 查看Session当前维护的Cookie(验证Cookie是否有效维护)
        print("\n===== 当前Session维护的Cookie信息 =====")
        for cookie in session.cookies:
            print(f"Cookie字段:{cookie.name} | 值:{cookie.value} | 过期时间:{cookie.expires}")
    
    except requests.exceptions.RequestException as e:
        print(f"请求失败:{e}")
    except Exception as e:
        print(f"数据解析失败:{e}")
    finally:
        # 关闭Session会话
        session.close()

# 主程序执行
if __name__ == "__main__":
    # 替换为你从浏览器复制的爱奇艺Cookie完整字符串
    IQIYI_COOKIE = "你的爱奇艺Cookie完整字符串(从浏览器复制)"
    get_iqiyi_data_with_session(IQIYI_COOKIE)

3.4 代码运行说明与注意事项

  1. 替换 Cookie 字符串:将代码中的IQIYI_COOKIE值替换为你从浏览器复制的爱奇艺有效 Cookie,否则会请求失败;
  2. 运行结果:成功运行后,会输出用户昵称、ID、VIP 等级,以及最近 10 条 VIP 观影记录(若有);
  3. Cookie 有效期:爱奇艺 Cookie 存在过期时间,若运行时提示 “未登录”,需重新从浏览器复制最新 Cookie;
  4. 反爬机制:爱奇艺有反爬虫策略,请勿高频次发送请求,避免 IP 被封禁,最好添加代理IP,推荐亿牛云隧道转发代理。
  5. 接口兼容性:本文使用的接口为爱奇艺公开前端接口,若后续接口更新,需对应调整请求地址和参数。

四、进阶优化与实战场景扩展

  1. Cookie 持久化存储:可将解析后的 Cookie 字典存储在本地文件(如json文件)中,下次运行程序时直接读取,无需手动复制粘贴 Cookie,示例代码:

python

运行

代码语言:javascript
复制
import json

# 保存Cookie到本地
def save_cookie_to_file(cookie_dict: Dict[str, str], file_path: str = "iqiyi_cookie.json"):
    with open(file_path, "w", encoding="utf-8") as f:
        json.dump(cookie_dict, f, ensure_ascii=False)

# 从本地读取Cookie
def load_cookie_from_file(file_path: str = "iqiyi_cookie.json") -> Dict[str, str]:
    with open(file_path, "r", encoding="utf-8") as f:
        return json.load(f)
  1. 自动登录获取 Cookie:通过requests模拟爱奇艺登录接口(POST 请求携带账号密码),自动获取 Cookie,无需手动从浏览器复制(需处理验证码、加密参数等问题,难度较高);
  2. 会话保持进阶:在Session对象中配置代理、SSL 验证等参数,适配更复杂的网络环境;
  3. 实战场景:可基于该方案实现爱奇艺 VIP 影片更新监控、个人观影记录统计、自动签到领会员等功能。

五、总结

本文详细讲解了requests库处理 Cookie 与 Session 的核心用法,通过对比手动 Cookie 传递与Session对象自动维护两种方案,结合爱奇艺实际场景实现了用户信息查询与观影记录获取的完整代码。核心要点回顾:

  1. Cookie 存储在客户端,是身份认证的核心凭证,Session 对象可自动维护 Cookie,简化多请求操作;
  2. requests.Session()是实现会话持久化的核心,能够自动存储和携带 Cookie,是实战中的首选方案;
  3. 爱奇艺操作的关键是获取有效 Cookie,通过Session对象注入 Cookie 后,可实现多接口连续请求。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、核心概念解析:Cookie 与 Session 的区别与关联
  • 二、requests 库核心工具:Cookie 处理与 Session 对象
    • 2.1 手动处理 Cookie:requests.get/post 的 cookies 参数
    • 2.2 自动维护 Cookie:requests.Session () 对象
  • 三、实操落地:爱奇艺 Cookie 与 Session 管理完整实现
    • 3.1 前期准备
    • 3.2 方案 1:手动携带 Cookie 请求爱奇艺用户信息
    • 3.3 方案 2:Session 对象自动维护 Cookie,实现多接口连续操作
    • 3.4 代码运行说明与注意事项
  • 四、进阶优化与实战场景扩展
  • 五、总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档