
在进行具体实操前,我们需要先厘清 Cookie 与 Session 的核心差异,这是理解后续操作的基础:
P00001(用户核心认证标识)、QC005(设备标识)等关键字段,是验证用户身份的核心凭证。Cookie 有过期时间限制,分为会话级 Cookie(关闭客户端即失效)和持久化 Cookie(存储在本地文件,过期时间由服务器指定)。requests库中的Session对象则是对 HTTP 会话的封装,能够自动维护会话过程中的 Cookie 信息,无需手动每次请求都添加 Cookie,极大简化了多请求连续操作的流程。对于爱奇艺操作而言,我们无需关心服务器端 Session 的具体实现,只需通过requests库维护好客户端的 Cookie 信息,即可实现持久化的会话访问。
requests库的基础get()、post()方法支持通过cookies参数手动传入 Cookie 数据,该参数接收一个dict类型(字典)数据,键为 Cookie 字段名,值为 Cookie 字段对应的值。
示例语法:
import requests
# 构造Cookie字典
cookie_dict = {
"Cookie字段1": "字段1对应值",
"Cookie字段2": "字段2对应值"
}
# 携带Cookie发送请求
response = requests.get(url="目标接口地址", cookies=cookie_dict)这种方式适用于单次请求或 Cookie 数据固定不变的场景,但缺点明显:多请求场景下需要重复传递 Cookie 字典,Cookie 更新后无法自动同步,灵活性较差,不适合爱奇艺多接口连续操作的场景。
requests库提供的Session对象是处理会话持久化的核心,其核心优势是在同一个 Session 实例发起的所有请求中,会自动维护 Cookie 信息—— 第一次请求获取到服务器下发的 Cookie 后,会自动存储在 Session 对象中,后续所有请求都会自动携带这些 Cookie,无需手动干预,完美适配爱奇艺的连续操作场景。
Session对象的核心使用流程:
Session对象,创建一个会话实例;get()、post()等请求;session.cookies查看当前会话中存储的 Cookie 信息。核心语法:
python
运行
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)requests库(若未安装)iqiyi.com发送的请求,切换至「Request Headers」,复制Cookie字段后的完整内容(这是后续操作的核心凭证)。该方案适用于单次请求场景,手动解析 Cookie 字符串为字典,通过cookies参数传入请求。
完整代码:
python
运行
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)该方案是更推荐的实战方案,通过Session对象自动维护 Cookie,可实现登录态保持下的多接口连续请求。
完整代码:
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)IQIYI_COOKIE值替换为你从浏览器复制的爱奇艺有效 Cookie,否则会请求失败;json文件)中,下次运行程序时直接读取,无需手动复制粘贴 Cookie,示例代码:python
运行
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)requests模拟爱奇艺登录接口(POST 请求携带账号密码),自动获取 Cookie,无需手动从浏览器复制(需处理验证码、加密参数等问题,难度较高);Session对象中配置代理、SSL 验证等参数,适配更复杂的网络环境;本文详细讲解了requests库处理 Cookie 与 Session 的核心用法,通过对比手动 Cookie 传递与Session对象自动维护两种方案,结合爱奇艺实际场景实现了用户信息查询与观影记录获取的完整代码。核心要点回顾:
requests.Session()是实现会话持久化的核心,能够自动存储和携带 Cookie,是实战中的首选方案;Session对象注入 Cookie 后,可实现多接口连续请求。原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。