当COOKIES_ENABLED是注释的时候scrapy默认没有开启cookie

当COOKIES_ENABLED没有注释,设置为False的时候scrapy默认使用了settings里面的cookie

当COOKIES_ENABLED设置为True的时候scrapy就会把settings的cookie关掉,使用自定义cookie

也就是

如果使用自定义cookie就把COOKIES_ENABLED设置为True

如果使用settings的cookie就把COOKIES_ENABLED设置为False

这里先给出我经过抓包测试,阅读源码等最终结论
0. scrapy 中 Requests 类,可以使用 cookies 和 headers 两种方法添加 cookie ,

1. COOKIES_ENABLED 默认为 True,注释掉 COOKIES_ENABLED 即使用默认值

2. COOKIES_ENABLED = True 时:

1. scrapy 启动 CookiesMiddleware 中间件,为请求自动添加服务器响应的 cookie,

2. 如果我们在 Request 中,使用 cookies 参数添加 cookie 时, 我们添加的 cookie 会额外加入到请求头中,如果响应有重名设置,则覆盖。(即,cookies 参数的cookie优先,但是 response 里的 cookie 也一个不少)

3. 如果我们使用 headers 参数添加 cookie,headers添加的 cookie 会失效,被响应 cookie 完全覆盖。(即,headers里设置的 cookie 无效)

3. COOKIES_ENABLED = False 时:

1. scrapy 关闭 CookiesMiddleware 中间件,response 设置的 cookie 失效

2. 使用 cookies 设置的 cookie 失效。

3. 使用 headers 设置的 cookie 保留。

如果不太明白,那么从使用情景解释:
1. 如果不想要任何 cookie,COOKIES_ENABLED = False, headers 里不要添加 cookie

2. 想要自动设置全部的 cookie,或者在全部的cookie基础上进行部分更改, COOKIES_ENABLED = True,用cookies参数调整 cookie 设置

3. 想要只用自己定义的 cookie,COOKIES_ENABLED=False,使用 headers 设置 cookie

以下是我的测试过程
scrapy中,自动配置了 CookiesMiddleware , 当我们设置 COOKIES_ENABLED = True 时, 它会在我们获得服务器响应后,自动的将 response 设置的 cookie 添加到下一个request 中去,例如:

当我们设置 COOKIES_ENABLED 为 True 的时候,我们两次访问百度,

第一次访问没有携带cookie,请求头中没有设置cookie,百度的响应中有了setcookie,

随后第二次访问,scrrapy就自动携带了上次响应所设置的cookie

当我们设置 COOKIES_ENABLED 为 False 的时候, 同样的代码两次访问百度,第二次不再携带cookie信息

那么 当我们设置自己的cookie时,会怎么样?

COOKIES_ENABLED = True 时,第二次请求头如下:

显然scrapy框架加入了我们自定义cookie,同时也把 response 设置的 cookie 自动加入了

同时如果我们自己设置的 cookie 的键值和response所设置的重名,则会覆盖原来 response 设置的 cookie,

COOKIES_ENABLED = False 时,第二次请求头如下:

即使我们手动设置了cookie,仍然不起作用了。

至此,总结一下:

COOKIES_ENABLED = True,自动在后续的请求中添加响应的cookie,我们自己通过cookies设置的cookie会加入并覆盖到响应设置的cookie中

COOKIES_ENABLED = False,通过cookies设置的,以及响应设置的cookie,全部无效。

等等,问题来了,我想要设置自己的cookie,而不想添加任何 response 设置的多余的cookie,怎么办,,,

经过测试,使用 headers 参数可以添加,我们把 COOKIES_ENABLED 设置为 False,测试代码如下:

发出的请求头如下:

这样就只含有我们所设置的cookie了。

scrapy 中 COOKIES_ENABLED 设置相关推荐

  1. 关于 scrapy 中 COOKIES_ENABLED 设置 理解问题,看这里就够了

    看了很多的文章, 感觉写的都有点扯淡 ,误人子弟 . 源码中 : 默认是注释掉的,但是上面的备注写的是开启状态(没关系, 不管). 所以这个 就有了三个状态: 1. 第一个 源码的 注释状态: # D ...

  2. Requests 和 Scrapy 中的代理 IP 设置

    摘要: Requests 和 Scrapy 中的代理 IP 设置方法. 目标测试网页如下,请求该网页可以返回当前 IP 地址: ∞ http://icanhazip.com 先来说说 Requests ...

  3. Scrapy框架的学习(8.scrapy中settings.py里面配置说明以及怎样设置配置或者参数以及怎样使用)

    1.settings.py里面的参数说明 每个参数其对应的官方得文档的网址 # -*- coding: utf-8 -*-# Scrapy settings for tencent project # ...

  4. 在scrapy框架中如何设置开放代理池达到反爬的目的

    我们在随机爬取某个网站的时候,比如对网站发出成千上万次的请求,如果每次访问的ip都是一样的,就很容易被服务器识别出你是一个爬虫.因此在发送请求多了之后我们就要设置ip代理池来随机更换我们的ip地址,使 ...

  5. 三十七、细说Scrapy中的settings设置

    @Author:Runsen 文章目录 爬虫项目结构 Scrapy默认设置 Scrapy深入下载中间件设置 导入配置from_crawler 代理设置 爬虫项目结构 建立完爬虫项目之后,都会有如下的结 ...

  6. 在Scrapy中使用爬虫动态代理IP

    本文介绍如何在Scrapy中使用无忧代理(www.data5u.com)的爬虫动态代理IP,以及如何设置User-Agent. 动态转发参考https://blog.csdn.net/u0109787 ...

  7. 一行代码搞定 Scrapy 随机 User-Agent 设置

    摘要:爬虫过程中的反爬措施非常重要,其中设置随机 User-Agent 是一项重要的反爬措施,Scrapy 中设置随机 UA 的方式有很多种,有的复杂有的简单,本文就对这些方法进行汇总,提供一种只需要 ...

  8. Scrapy中的splash的安装应用

    Scrapy中的splash的安装应用 因为要去抓取部分经过JavaScript渲染的网页数据,所以使用scrapy中的Request返回的是没有经过渲染的网页代码, 因此我们就要运用Scrapy中的 ...

  9. 三十三、Scrapy中的强大媒体管道ImagesPipeline

    @Author:Runsen 三十一.Scrapy爬取百度图片 上文用了scrapy爬取了百度的美女图片,今天写写scrapy中的Image Pipeline. scrapy提供了很多中间组件可以让我 ...

  10. Scrapy框架的学习(10.Scrapy中的模拟登陆(使用cookie模拟登陆))

    1. 为什么需要模拟登陆? 获取cookie,能够爬取登陆后的页面的数据 2.使用cookie模拟登陆的场景 (1) cookie过期时间很长,常见于一些不规范的网站 (2) 能在cookie过期之前 ...

最新文章

  1. 使用sudo进入root权限,以及防止root密码被恶意篡改
  2. svn command line tag
  3. java无法编译_Java静态方法无法编译
  4. Mysql的sql注入_MySQL SQL注入
  5. python文件输出中文_【python】中文的输出,打印,文件编码问题解决方法
  6. mooc- 基本程序设计方法week1,week2
  7. Windows Server 2012 R2 或 2016 无法安装 .Net 3.5.1
  8. Android高性能ORM数据库DBFlow入门
  9. 盘一盘 Spring 核心技术之依赖注入 | 原力计划
  10. Spark笔记整理(一):spark单机安装部署、分布式集群与HA安装部署+spark源码编译...
  11. java app的强制更新吗_java – Spring JPA / Hibernate事务强制插入而不是更新
  12. mysql插入时unique字段重复插入失败
  13. 基于OWIN WebAPI 使用OAUTH2授权服务【授权码模式(Authorization Code)】
  14. sqlserver2008r2通过发布和订阅的方式进行数据库同步
  15. 【BZOJ3894】文理分科(最小割)
  16. 实用工具分享,如何批量修改文件夹名称的一部分
  17. C++报错 invalid operands to binary expression
  18. java field_Java Field.get()取得对象的Field属性值
  19. 河南科技大学计算机学院录取名单,河南科技大学2019年硕士研究生拟录取名单(第四批)...
  20. three.js纹理贴图不显示

热门文章

  1. 第十五课 简单易懂的指针
  2. opencv最大内接矩形笔记
  3. 求解旋转图像的最大内接矩形
  4. BZOJ 4199: [Noi2015]品酒大会/UOJ #131. 【NOI2015】品酒大会 后缀自动机 树形dp / 后缀数组 单调栈
  5. 在Mac下,快速搭建针对WP8应用的PhoneGap开发环境
  6. 维基百科中文语料库训练word2vec模型和使用总结
  7. UESTC 男神的礼物
  8. 新版男神女神完整投票系统源码V5.5.21版本
  9. 成功解决Error: Failed to load class com.leo.sparkrdd.SparkRDDCalculateApp.
  10. 图像分辨率和图像大小的计算