【爬虫】Scrapy中Cookie设置的一些测试

00. 环境

  • scrapy:2.3.0
  • python:3.7

01. Scrapy中设置Cookie的几种方法

 在scrapy中主要有以下几种设置cookie的方法,其中第一种和第三种可以直接使用网页中复制过来str类型的cookie,第二种和第四种需要设置为dict类型的cookie

1.1 利用seetings文件中的DEFAULT_REQUEST_HEADERS设置cookie
DEFAULT_REQUEST_HEADERS = {
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'Accept-Language': 'zh-CN,zh;q=0.9',
    "sec-fetch-site": "none",
    "sec-fetch-mode": "navigate",
    "sec-fetch-dest": "document",
    "user-agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) "
                  "AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1",
    "cookie": "123"
},
1.2 利用Spider中Request中的cookies参数或者headers参数设置cookie
# 利用cookies参数设置cookie
def start_requests(self):
    yield scrapy.Request(url,dont_filter=True,cookies={"a": "b"})
1.3 利用Spider中Request中的headers参数设置cookie
# 利用headers参数设置cookie
def start_requests(self):
    headers = {
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
	    'Accept-Language': 'zh-CN,zh;q=0.9',
	    "sec-fetch-site": "none",
	    "sec-fetch-mode": "navigate",
	    "sec-fetch-dest": "document",
	    "user-agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) "
	                  "AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1",
	    "cookie": "123"
	    }
    yield scrapy.Request(url,dont_filter=True,header=headers)
1.4 利用中间件DownloadMiddleware中的设置cookie
def process_request:
	request.cookies={"a": "b"}

02. 关于scrapy中设置是cookie的优先级

先放结论:1.3 >= 1.4 > 1.2 > 1.1。同时通过以上四种方法为request添加cookie,根据settings中的COOKIES_ENABLED(稍后会解释这个设置的用途)分为以下几种:

  • settings中的COOKIES_ENABLED = False,则优先使用1.3设置的cookie
  • settings中的COOKIES_ENABLED被注释,则使用1.3的cookie+1.4的cookie的合并值
  • settings中的COOKIES_ENABLED = True,则使用1.3的cookie+1.4的cookie的合并值

03. 关于COOKIES_ENABLED设置的测试说明

3.1 settings中注释 COOKIES_ENABLED

(1)如果同时设置四处cookie,则优先使用1.3+1.4的合并值
(2)如果设置三处cookie(1.1/1.2/1.4),则优先使用1.1 + 1.4的合并值
(3)如果设置两处cookie(1.2/1.4), 则优先使用该1.4的值
(4)如果设置一处cookie(1.2), 则优先使用该1.2的值

3.2 settings中设置 COOKIES_ENABLED = False

(1)如果同时设置四处cookie,则优先使用1.3的值
(2)如果设置三处cookie(1.1/1.2/1.4),则优先使用1.1的值
(3)如果设置两处cookie(1.2/1.4), 不会使用cookie
(4)如果设置一处cookie(1.2), 不会使用cookie

3.3 settings中设置 COOKIES_ENABLED = True

(1)如果同时设置四处cookie,则优先使用1.3+1.4的合并值
(2)如果设置三处cookie(1.1/1.2/1.4),则优先使用1.1 + 1.4的合并值
(3)如果设置两处cookie(1.2/1.4), 则优先使用该1.4的值
(4)如果设置一处cookie(1.2), 则优先使用该1.2的值

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值