Python 操作 Cookie 完全指南,爬虫与 Web 开发实战

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

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

1. 前置准备

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

pip install requests 

访问网站时,服务器会自动返回 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")) 

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

示例:模拟登录某测试网站(以 GitHub 简化示例)

import requests \# 1. 登录接口(实际开发中替换为目标网站的登录URL) login\_url = "https://github.com/session" \# 登录参数(需根据网站表单字段调整,可通过F12抓包获取) login\_data = {   "login": "你的GitHub账号",   "password": "你的GitHub密码",   "commit": "Sign in" } \# 2. 创建会话对象(自动维持Cookie,关键!) session = requests.Session() \# 3. 发送登录请求(会话会自动保存登录后的Cookie) response = session.post(login\_url, data=login\_data) \# 4. 携带Cookie访问需要登录的页面(如个人主页) profile\_url = "https://github.com/你的用户名" profile\_response = session.get(profile\_url) \# 验证是否登录成功(判断页面是否包含个人信息) if "你的用户名" in profile\_response.text:   print("登录成功,已携带Cookie访问个人主页!")   # 查看会话中保存的Cookie   print("\n会话中保存的Cookie:")   for key, value in session.cookies.get\_dict().items():   print(f"{key}: {value}") else:   print("登录失败,请检查账号密码或参数格式!") 

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

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

前置准备:安装 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。

前置准备:安装 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。
  • 安全配置:敏感 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)。

1. 爬虫场景:Cookie 不生效

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

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

  • 原因 1:path配置不一致(设置时path=/user,读取时在/路径);
  • 原因 2:httponly=True导致前端 JavaScript 无法读取(但后端可正常读取);
  • 解决:确保设置和读取的path一致,根据需求调整httponly参数。
  • 原因:Cookie 默认不支持中文,直接存储会乱码;
  • 解决:用urllib.parse.quote()编码,读取时用unquote()解码。

4. 爬虫被封 IP

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

Read more

前端八股文面经大全:字节跳动音视频前端一面·上(2026-03-03)·面经深度解析

前端八股文面经大全:字节跳动音视频前端一面·上(2026-03-03)·面经深度解析

前言 大家好,我是木斯佳。 相信很多人都感受到了,在AI浪潮的席卷之下,前端领域的门槛在变高,纯粹的“增删改查”岗位正在肉眼可见地减少。曾经热闹非凡的面经分享,如今也沉寂了许多。但我们都知道,市场的潮水退去,留下的才是真正在踏实准备、努力沉淀的人。学习的需求,从未消失,只是变得更加务实和深入。 这个专栏的初衷很简单:拒绝过时的、流水线式的PDF引流贴,专注于收集和整理当下最新、最真实的前端面试资料。我会在每一份面经和八股文的基础上,尝试从面试官的角度去拆解问题背后的逻辑,而不仅仅是提供一份静态的背诵答案。无论你是校招还是社招,目标是中大厂还是新兴团队,只要是真实发生、有价值的面试经历,我都会在这个专栏里为你沉淀下来。 温馨提示:市面上的面经鱼龙混杂,甄别真伪、把握时效,是我们对抗内卷最有效的武器。 面经原文内容 📍面试公司:字节跳动 🕐面试时间:3月3日 💻面试岗位:音视频前端(春招) ❓面试问题: 1. 自我介绍 2. 用了哪些方法使FCP渲染耗时缩短近1s 3.

极客大挑战2025-web复现

极客大挑战2025-web复现

题解 1.one_last_image(php文件上传/ 短标签利用) 进来以后发现是个文件上传的题,然后就试着传一个php文件上去 发现里面给出了uploads的路径,访问。如果是空的php进去会发现什么都没有,为了绕过对常见的php标签以及命令执行函数的限制,我们用短标签。 <?=`env`; 或 <?=('sys'.'tem')('env'); 然后顺着操作即可。然后其他人说在phpinfo里面可以找到, 2.Vibe SEO(站点地图的使用/未关闭文件与文件描述符的读取) 看到这个题还是很蒙的,因为界面里什么都没有。然后了解了一下才知道站点地图是什么。 站点地图(sitemap.xml)是一个XML格式的文件,它列出了网站中所有重要的网页URL,并可以附带每个URL的额外信息(例如最后更新时间、更新频率、相对重要性等),主要作用是帮助搜索引擎更高效、全面地抓取和索引网站内容。 以下是它的核心要点:核心作用引导搜索引擎爬虫:

使用Open WebUI下载的模型文件(Model)默认存放在哪里?

使用Open WebUI下载的模型文件(Model)默认存放在哪里?

🏡作者主页:点击!  🤖Ollama部署LLM专栏:点击! ⏰️创作时间:2025年2月21日21点21分 🀄️文章质量:95分 文章目录 使用CMD安装存放位置 默认存放路径 Open WebUI下载存放位置 默认存放路径 扩展知识 关于 Ollama 核心价值 服务 关于Open WebUI 核心特点 主要功能 使用场景 Open WebUI下载存放位置 在使用Ollama平台进行深度学习和机器学习模型训练时,了解模型文件的存储位置至关重要。这不仅有助于有效地管理和部署模型,还能确保在需要时能够快速访问和更新这些模型文件。本文将详细探讨Ollama下载的模型文件存放在哪里,并提供相关的操作指南和最佳实践 最后感谢大家 希望这篇文章能帮助你! 使用CMD安装存放位置 以下做测试 我们采用哦llama38B模型来测试 输入命令等待安装即可 默认存放路径 C:\Users\Smqnz\.ollama\models\manifests\registry.ollama.ai 不要直接复制粘贴 我的用户名和你的不一样

Spring Boot Web 后端开发注解核心

Spring Boot Web 后端开发注解核心

在 Spring Boot Web 后端开发中,注解(Annotation)是核心,它们极大简化了配置、依赖管理、请求映射、数据持久化等。本文将按照功能分类,详细列出常用注解的作用、使用方式、典型场景,并附带简明代码示例,帮助你全面掌握并灵活运用。 文章目录 * 1. 核心启动与配置注解 * 2. 控制器与请求映射注解 * 3. 依赖注入与组件注册注解 * 4. 数据访问(JPA / Spring Data)注解 * 5. 事务管理注解 * 6. 缓存注解 * 7. 异步与定时任务注解 * 8. 异常处理与控制器增强 * 9. 跨域支持注解 * 10. 条件化配置注解(自动配置相关) * 11. 测试注解 * 12. Lombok 常用注解(简化代码)