当前位置: 首页 > news >正文

【Python爬虫基础篇】--3.cookie和session

目录

1.cookie

1.1.定义

1.2.参数

1.3.分类

2.session

3.使用cookie登录微博

4.使用session登录


1.cookie

        由于http是一个无状态的协议,请求与请求之间无法相互传递或者记录一些信息,cookie和session正是为了解决这个问题而产生。

        例子:当我需要爬取我的微博账号的粉丝信息的时候,如果直接使用下面的代码

import requestsbase_url = 'https://weibo.com/u/6320270401'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36',
}
response=requests.get(base_url,headers=headers) 

是获取不到信息的,

这并不是微博的个人信息页面。这也再一次证明了如果代码中并没有携带Cookie信息,则并不会进入到个人信息页面,而是跳转到了其他页面。

1.1.定义

定义:cookie指某些网站为例辨别用户身份,进行会话跟踪而存储在用户本地终端上的数据

1.2.参数

参数

字段作用
NameCookie的名称,创建后不可更改。
ValueCookie的值。Unicode字符需编码,二进制数据需BASE64编码。
Domain可访问该Cookie的域名(如 .zhihu.com 允许所有子域名访问)。若未指定,默认为当前域名。
MaxAge失效时间(秒)。正数表示存活时间;负数表示浏览器关闭后失效;0表示立即删除。与Expires配合使用(优先级高于Expires)。
Path限制Cookie的路径访问。例如 /path/ 仅允许该路径下的页面访问;/ 表示全站可访问。
SizeCookie的大小(字节)。
HTTP若为true,则仅通过HTTP头传输,禁止JavaScript(如document.cookie )访问,增强安全性(防XSS攻击)。
Secure若为true,仅通过HTTPS/SSL等安全协议传输,防止明文泄露。默认为false

1.3.分类

  1. 会话cookie
  2. 持久cookie
  • 会话cookie指存在浏览器内存的cookie,当浏览器关闭,会话cookie会失效。
  • 持久cookie是保存在硬盘上的cookie
  • 这两种cookie的分配标准主要是通过maxAge或者expires这个cookie字段

2.session

(议会等的)会议,会期;

Session(会话)是服务端用来跟踪用户状态的机制。核心原理是:

  • 服务器为每个用户创建唯一的Session ID(通常通过Cookie传递),并将用户数据(如登录信息、购物车)存储在服务端(内存、数据库或缓存中)。
  • 客户端仅持有Session ID,实际数据不暴露,安全性更高。
维度CookieSession
存储位置客户端服务端
安全性较低(需额外防护)较高(依赖Session ID安全)
生命周期可长期或会话级通常会话级
性能影响增加网络负载增加服务器负载
典型应用用户偏好、跟踪登录状态、敏感操作

        联系:当客户端发送一个cookie,服务器会从这个cookie中找到sessionID,再查找出相应的session信息返回给客户端,来进行用户页面的流转。如果通过sessionID来查找session的时候,发现没有session(一般第一次登陆或者清空了浏览器),那么就会创建一个session。

3.使用cookie登录微博

获取cookie:在控制台输入:

document.cookie

然后把获取到的cookie复制到代码中:

import urllibimport requestsurl = 'https://weibo.com/u/6320270401'headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)  QQBrowser/11.8.5118.400','cookie':'你的cookie'
}
# 请求对象的定制# request = requests.get(url, headers=headers)
# 请求对象的定制
request = urllib.request.Request(url=url, headers=headers)
# 模拟浏览器向服务器发送请求
response = urllib.request.urlopen(request)
# 获取响应数据
content = response.read().decode("gb2312")
# 打印响应数据
print(content)
# 下载到本地

运行网页直接打开界面:

可以看到,得到的是个人信息页面,但内容并不完整,可以说是完全没有实际的内容,可能微博这几年不断更新,优化了反爬手段,只添加Cookie还不足以成功爬取个人页面的完整内容。不过,能到这一步就可以了。这里主要讲解Cookie的作用。

打开该页面,只呈现出页面框架,没有具体信息,并且显示不安全。

4.使用session登录

import requests
from urllib.parse import urljoinBASE_URL = 'https://login2.scrape.center/'
LOGIN_URL= urljoin(BASE_URL, '/login')
INDEX_URL = urljoin(BASE_URL, '/page/1')
USERNAME = 'admin'
PASSWORD = 'admin'session = requests.Session()response_login = session.post(LOGIN_URL, data={'username': USERNAME, 'password':PASSWORD})cookies = session.cookies
print('Cookies', cookies)response_index = session.get(INDEX_URL)
print('Response Status', response_index.status_code)
print('Response URL', response_index.url)
import requestsbase_url = 'http://www.renren.com/PLogin.do'
headers= {'Host': 'www.renren.com','Referer': 'http://safe.renren.com/security/account',
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36',
}
data = {'email':邮箱,'password':密码,
}
#创建一个session对象
se = requests.session()
#用session对象来发送post请求进行登录。
se.post(base_url,headers=headers,data=data)
response = se.get('http://www.renren.com/971682585')if '死性不改' in response.text:print('登录成功!')
else:print(response.text)print('登录失败!')

相关文章:

  • 乐视系列玩机---乐视1s x500 x501 x502等系列线刷救砖以及刷写第三方twrp 卡刷第三方固件步骤解析
  • 现有一整型数组,a[8] = { 4,8,7,0,3,5,9,1},现使用堆排序的方式原地对该数组进行升序排列。那么在进行第一轮排序结束之后,数组的顺序为?
  • 【HTML】【Web开发】滑动条挑战
  • Docker的基本概念和一些运用场景
  • Linux[基础指令][2]
  • Vue3 + Vite + TS,使用 ExcelJS导出excel文档,生成水印,添加背景水印,dom转图片,插入图片,全部代码
  • Java中的方法重写(Override)与方法重载(Overload)详解
  • 位运算练习:起床困难综合征(贪心,位运算)(算法竞赛进阶指南学习笔记)
  • 关于ubuntu密码正确但是无法登录的情况
  • 互联网大厂Java面试:从基础到进阶的技术点探讨
  • 短信验证码安全实战:三网API+多语言适配开发指南
  • C语言学习记录(17)编译和链接
  • vue3 + element-plus中el-drawer抽屉滚动条回到顶部
  • Scenario Dreamer:用于生成驾驶模拟环境的矢量化潜扩散模型
  • 【Linux禁用历史命令】
  • 从零开始配置 Zabbix 数据库监控:MySQL 实战指南
  • SSH 互信被破坏能导致 RAC 异常关闭吗
  • 脚本备份数据
  • 热敏电阻的应用说明
  • Centos虚拟机远程连接缓慢
  • 2025年一季度上海市生产总值
  • 深一度|王励勤二次创业从未停步,带领中国乒乓直面挑战
  • 从神舟五号到神舟二十号,每次任务标识藏着哪些逐梦星辰的密码
  • 具象的“南方”|一个海南艺术家的穷困与信爱
  • 山西一国道塌陷致2死后续:地质雷达检测出10处道路病害
  • 88岁罗马教皇方济各突然去世,遗嘱内容对外公布