跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Python

Python 操作 Cookie 指南:爬虫与 Web 开发实战

Python 中操作 Cookie 的两种主要场景。在爬虫场景中,使用 requests 库获取、携带及手动设置 Cookie,模拟登录状态并维持会话。在 Web 开发场景中,分别展示了 Flask 和 Django 框架下设置、读取和删除 Cookie 的方法,包括安全配置(httponly、secure)、中文处理及跨域问题。文章还提供了常见问题排查与避坑建议,帮助开发者高效处理 Cookie 相关任务。

DockerOne发布于 2026/4/6更新于 2026/9/1085 浏览

在 Python 开发中,Cookie 的应用主要分为两大场景:爬虫(模拟浏览器获取 / 携带 Cookie) 和Web 开发(给客户端设置 Cookie)。

一、爬虫场景:用 requests 库获取 / 携带 Cookie

爬虫中操作 Cookie 的核心需求是:模拟用户登录状态(如爬取需要登录的网站数据)、维持会话连接。requests 库是 Python 爬虫的首选工具,处理 Cookie 简洁高效。

1. 前置准备

先安装 requests 库(若未安装):

pip install requests

2. 场景 1:获取网站返回的 Cookie

访问网站时,服务器会自动返回 Cookie,用 requests 可直接提取:

import requests
# 目标网站(以百度为例)
url = "https://www.baidu.com"
# 发送请求,获取响应
response = requests.get(url)
# 方式 1:直接获取响应中的 Cookie(RequestsCookieJar 对象,类似字典)
cookies = response.cookies
print("响应 Cookie(RequestsCookieJar 格式):")
print(cookies)
# 方式 2:转为字典格式(更易读取)
cookie_dict = requests.utils.dict_from_cookiejar(cookies)
print("\nCookie(字典格式):")
for key, value in cookie_dict.items():
    print(f"{key}: {value}")
# 方式 3:获取响应头中的 Set-Cookie(原始格式)
print("\n响应头中的 Set-Cookie:")
print(response.headers.get("Set-Cookie"))

3. 场景 2:携带 Cookie 发送请求(模拟登录状态)

很多网站需要登录后才能访问核心数据,此时需先登录获取 Cookie,再携带 Cookie 请求目标页面。

示例:模拟登录某测试网站(以 GitHub 简化示例)
import requests
# 1. 登录接口(实际开发中替换为目标网站的登录 URL)
login_url = "https://github.com/session"
# 登录参数(需根据网站表单字段调整,可通过 F12 抓包获取)
login_data = {
    "login": ,
    : ,
    : 
}

session = requests.Session()

response = session.post(login_url, data=login_data)

profile_url = 
profile_response = session.get(profile_url)

   profile_response.text:
    ()
    
    ()
     key, value  session.cookies.get_dict().items():
        ()
:
    ()
"你的 GitHub 账号"
"password"
"你的 GitHub 密码"
"commit"
"Sign in"
# 2. 创建会话对象(自动维持 Cookie,关键!)
# 3. 发送登录请求(会话会自动保存登录后的 Cookie)
# 4. 携带 Cookie 访问需要登录的页面(如个人主页)
"https://github.com/你的用户名"
# 验证是否登录成功(判断页面是否包含个人信息)
if
"你的用户名"
in
print
"登录成功,已携带 Cookie 访问个人主页!"
# 查看会话中保存的 Cookie
print
"\n会话中保存的 Cookie:"
for
in
print
f"{key}: {value}"
else
print
"登录失败,请检查账号密码或参数格式!"

4. 场景 3:手动设置 Cookie 发送请求

若已提前获取 Cookie(如浏览器中复制),可手动构造 Cookie 发送请求:

import requests
url = "https://www.baidu.com"
# 手动构造 Cookie(字典格式,从浏览器复制的 Cookie 需转为键值对)
headers = {
    "Cookie": "BDUSS=xxx; BAIDUID=xxx; BIDUPSID=xxx", # 替换为实际 Cookie
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/120.0.0.0" # 模拟浏览器
}
response = requests.get(url, headers=headers)
print("携带手动设置的 Cookie 访问成功!")

爬虫操作 Cookie 注意事项:

  • 用 requests.Session() 自动维持会话,避免重复处理 Cookie;
  • 登录时的参数(如 login_data)需通过浏览器 F12 抓包获取,确保字段名与表单一致;
  • 部分网站的 Cookie 有过期时间,长时间爬取需定期重新登录刷新 Cookie;
  • 避免频繁请求,添加 time.sleep(1) 等延时,防止被封 IP。

二、Web 开发场景:Flask/Django 设置 Cookie

在 Python Web 开发中,服务器需要给客户端(浏览器)设置 Cookie,用于记住用户状态(如登录状态、用户偏好)。以下是 Flask 和 Django 框架的实操示例。

1. Flask 框架:设置 / 读取 / 删除 Cookie

前置准备:安装 Flask
pip install flask
完整示例代码:
from flask import Flask, make_response, request
app = Flask(__name__)

# 1. 设置 Cookie(给客户端发送 Cookie)
@app.route("/set_cookie")
def set_cookie():
    # 创建响应对象
    response = make_response("已为你设置 Cookie!")
    
    # 设置 Cookie:key=value,max_age=过期时间(秒),path=作用路径
    response.set_cookie(
        key="username",
        value="zhangsan",
        max_age=3600, # 1 小时后过期
        path="/", # 整站生效
        secure=False, # 本地开发设为 False,HTTPS 环境设为 True
        httponly=True # 禁止 JavaScript 读取,提升安全性
    )
    
    # 再设置一个持久 Cookie(7 天过期)
    response.set_cookie("theme", "dark", max_age=7*24*3600)
    return response

# 2. 读取客户端的 Cookie
@app.route("/get_cookie")
def get_cookie():
    # 读取 Cookie:request.cookies.get(key),不存在返回 None
    username = request.cookies.get("username")
    theme = request.cookies.get("theme")
    
    if username and theme:
        return f"当前 Cookie:用户名={username},主题={theme}"
    else:
        return "未检测到 Cookie,请先访问/set_cookie 设置"

# 3. 删除 Cookie
@app.route("/delete_cookie")
def delete_cookie():
    response = make_response("已删除 Cookie!")
    # 删除 Cookie:key 需与设置时一致,path 需匹配
    response.delete_cookie("username", path="/")
    response.delete_cookie("theme", path="/")
    return response

if __name__ == "__main__":
    app.run(debug=True)
测试步骤:
  1. 运行代码,访问 http://127.0.0.1:5000/set_cookie 设置 Cookie;
  2. 访问 http://127.0.0.1:5000/get_cookie 查看 Cookie;
  3. 访问 http://127.0.0.1:5000/delete_cookie 删除 Cookie。

2. Django 框架:设置 / 读取 / 删除 Cookie

前置准备:安装 Django 并创建项目
pip install django
django-admin startproject cookie_demo
cd cookie_demo
python manage.py startapp user
步骤 1:配置项目(cookie_demo/settings.py)

在 INSTALLED_APPS 中添加 user:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'user' # 添加这行
]
步骤 2:编写视图(user/views.py)
from django.http import HttpResponse

# 1. 设置 Cookie
def set_cookie(request):
    response = HttpResponse("Django 已设置 Cookie!")
    # 设置 Cookie:max_age=秒,expires=datetime(二选一)
    response.set_cookie(
        key="user_id",
        value="1001",
        max_age=3600, # 1 小时过期
        path="/",
        httponly=True
    )
    return response

# 2. 读取 Cookie
def get_cookie(request):
    # 读取 Cookie:request.COOKIES 是字典
    user_id = request.COOKIES.get("user_id")
    if user_id:
        return HttpResponse(f"读取到 Cookie:user_id={user_id}")
    else:
        return HttpResponse("未找到 Cookie,请先访问/set_cookie")

# 3. 删除 Cookie
def delete_cookie(request):
    response = HttpResponse("Django 已删除 Cookie!")
    response.delete_cookie("user_id", path="/")
    return response
步骤 3:配置 URL(cookie_demo/urls.py)
from django.contrib import admin
from django.urls import path
from user.views import set_cookie, get_cookie, delete_cookie

urlpatterns = [
    path('admin/', admin.site.urls),
    path('set_cookie/', set_cookie),
    path('get_cookie/', get_cookie),
    path('delete_cookie/', delete_cookie),
]
测试步骤:
  1. 运行服务器:python manage.py runserver;
  2. 访问 http://127.0.0.1:8000/set_cookie 设置 Cookie;
  3. 访问 http://127.0.0.1:8000/get_cookie 查看 Cookie;
  4. 访问 http://127.0.0.1:8000/delete_cookie 删除 Cookie。

Web 开发操作 Cookie 注意事项:

  • 安全配置:敏感 Cookie(如用户 ID、登录凭证)务必设置 httponly=True(防止 XSS 攻击)和 secure=True(仅 HTTPS 传输);
  • 过期时间:避免设置过长的过期时间,敏感操作的 Cookie 建议 1 小时内过期;
  • 中文处理:若需存储中文,需用 urllib.parse.quote() 编码,读取时用 urllib.parse.unquote() 解码:
# Flask 示例:存储中文 Cookie
from urllib.parse import quote, unquote
response.set_cookie("nickname", quote("张三"), max_age=3600)
# 读取中文 Cookie
nickname = unquote(request.cookies.get("nickname"))
  • 跨域问题:默认 Cookie 不支持跨域,若需跨域共享 Cookie,需配置 CORS_ALLOW_CREDENTIALS=True(Flask 需安装 flask-cors,Django 需配置 CORS)。

三、Python 操作 Cookie 常见问题与避坑

1. 爬虫场景:Cookie 不生效

  • 原因:未使用 requests.Session(),每次请求都是独立会话;
  • 解决:用 session = requests.Session(),所有请求通过 session 发送,自动维持 Cookie。

2. Web 开发:Cookie 设置后无法读取

  • 原因 1:path 配置不一致(设置时 path=/user,读取时在 / 路径);
  • 原因 2:httponly=True 导致前端 JavaScript 无法读取(但后端可正常读取);
  • 解决:确保设置和读取的 path 一致,根据需求调整 httponly 参数。

3. 中文 Cookie 乱码

  • 原因:Cookie 默认不支持中文,直接存储会乱码;
  • 解决:用 urllib.parse.quote() 编码,读取时用 unquote() 解码。

4. 爬虫被封 IP

  • 原因:频繁请求且未携带真实 User-Agent,被网站识别为爬虫;
  • 解决:在请求头中添加 User-Agent(模拟浏览器),并添加合理延时。

目录

  1. 一、爬虫场景:用 requests 库获取 / 携带 Cookie
  2. 1. 前置准备
  3. 2. 场景 1:获取网站返回的 Cookie
  4. 目标网站(以百度为例)
  5. 发送请求,获取响应
  6. 方式 1:直接获取响应中的 Cookie(RequestsCookieJar 对象,类似字典)
  7. 方式 2:转为字典格式(更易读取)
  8. 方式 3:获取响应头中的 Set-Cookie(原始格式)
  9. 3. 场景 2:携带 Cookie 发送请求(模拟登录状态)
  10. 示例:模拟登录某测试网站(以 GitHub 简化示例)
  11. 1. 登录接口(实际开发中替换为目标网站的登录 URL)
  12. 登录参数(需根据网站表单字段调整,可通过 F12 抓包获取)
  13. 2. 创建会话对象(自动维持 Cookie,关键!)
  14. 3. 发送登录请求(会话会自动保存登录后的 Cookie)
  15. 4. 携带 Cookie 访问需要登录的页面(如个人主页)
  16. 验证是否登录成功(判断页面是否包含个人信息)
  17. 4. 场景 3:手动设置 Cookie 发送请求
  18. 手动构造 Cookie(字典格式,从浏览器复制的 Cookie 需转为键值对)
  19. 爬虫操作 Cookie 注意事项:
  20. 二、Web 开发场景:Flask/Django 设置 Cookie
  21. 1. Flask 框架:设置 / 读取 / 删除 Cookie
  22. 前置准备:安装 Flask
  23. 完整示例代码:
  24. 1. 设置 Cookie(给客户端发送 Cookie)
  25. 2. 读取客户端的 Cookie
  26. 3. 删除 Cookie
  27. 测试步骤:
  28. 2. Django 框架:设置 / 读取 / 删除 Cookie
  29. 前置准备:安装 Django 并创建项目
  30. 步骤 1:配置项目(cookie_demo/settings.py)
  31. 步骤 2:编写视图(user/views.py)
  32. 1. 设置 Cookie
  33. 2. 读取 Cookie
  34. 3. 删除 Cookie
  35. 步骤 3:配置 URL(cookie_demo/urls.py)
  36. 测试步骤:
  37. Web 开发操作 Cookie 注意事项:
  38. Flask 示例:存储中文 Cookie
  39. 读取中文 Cookie
  40. 三、Python 操作 Cookie 常见问题与避坑
  41. 1. 爬虫场景:Cookie 不生效
  42. 2. Web 开发:Cookie 设置后无法读取
  43. 3. 中文 Cookie 乱码
  44. 4. 爬虫被封 IP

更多推荐文章

查看全部
  • AI 时代技术民主化:文科生的新机遇与实战路径
  • Java 环境搭建与首个 Hello World 实战指南
  • 工业具身智能实操指南:从视觉识别到自主执行
  • Java 读取 Word 文档 (.doc/.docx) 实现方法
  • 人工智能数学基础:概率论中 KL 散度在变分自编码器中的应用
  • Stable Diffusion 视觉提示词注入攻击原理与实现
  • Linux 系统升级 CUDA 到最新版本
  • FAST-LIVO2 算法解析与实战(一):多传感器融合 SLAM 核心原理
  • 普通笔记本使用 Faster-Whisper 如何选择模型模式
  • C++ 入门:引用、内联函数与 nullptr 详解
  • AI 时代 Python 开发者的创意防御与实战指南
  • MySQL MGR 集群部署实战:基于 InnoDB Cluster 与 MySQL Router
  • 在 IntelliJ IDEA 中使用飞算 AI 的实操记录
  • PyTorch 生成式人工智能:神经网络与模型训练详解
  • OmniSteward:基于 LLM Agent 的智能家居与电脑控制方案
  • 企业级风控接入:天远车辆出险查询API Java 集成指南
  • 芭堤雅中文离线地图 App 发布,支持离线导航与酒店查询
  • 从零实现 LLaMA 架构:构建轻量级大语言模型
  • 默认安全治理实践:水平越权检测与前端安全防控
  • 通义万相 2.1 视频生成模型在蓝耘智算平台的部署与应用

相关免费在线工具

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online