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

看了很多的文章, 感觉写的都有点扯淡 ,误人子弟 。 

源码中 : 默认是注释掉的,但是上面的备注写的是开启状态(没关系, 不管)。

所以这个 就有了三个状态:

1. 第一个 源码的 注释状态:

# Disable cookies (enabled by default)
# COOKIES_ENABLED = False

这个状态下, 其实可以理解成  cookie 是开启的状态, 但是他的获取值 是通过源码的方法,scrapy直接获取网页的上层的cookie ,然后带到下一层去的。 

2. 第二种解开注释的情况下 :

# Disable cookies (enabled by default)
COOKIES_ENABLED = False

这个状态下的 cookie  是通过 headers 添加上去的,这个就是中间件里面的 包裹在头部里面

就是 setting源码中的 

# Override the default request headers:
#DEFAULT_REQUEST_HEADERS = {
#   'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
#   'Accept-Language': 'en',
#}

要是只是个别需要增加头部的,可以直接传参进去。 setting 写入时传全局的;

从这个里面去添加 cookie, token 等 一系列东西 。  或者 在请求的时候自己带上 ,源码里面 ,有 可以带的参数。headers  这个参数, 只是当前项目需要,可以在这里传

class Request(object_ref):

    def __init__(self, url, callback=None, method='GET', headers=None, body=None,
                 cookies=None, meta=None, encoding='utf-8', priority=0,
                 dont_filter=False, errback=None, flags=None, cb_kwargs=None):

3. 第三种状态 就是 设置为  true:

# Disable cookies (enabled by default)
COOKIES_ENABLED = True

这种的, 就是覆盖源码中的方法, 后面使用的是自己的cookie ,

需要在请求的时候 带上 cookies= cookie

cookie 自己设置到 setting  或者 spider 里面都可以。

这个设置是 全局设置的 。 以后的请求都是这个cookie 。

需要先声明他: cookie = '.......'

然后在请求的里面写上,

yield scrapy.Request(
                href,
                callback=self.get_parse,
                cookies=cookie,
                meta={
                    'name': name
                }
            )

  def start_requests(self):
        cookie = {}
        str_cookie = '你的cookie信息'
        str_cookie_items_list = str_cookie.split(';')
        for str_cookie_items in str_cookie_items_list:
            str_cookie_kw = str_cookie_items.split('=')
            cookie[str_cookie_kw[0].strip()] = str_cookie_kw[1].strip()

        yield scrapy.Request(
            url=self.start_urls[0],
            method='get',
            callback=self.parse,
            cookies=cookie
        )
        
  def parse(self, response, **kwargs):
      print(response.text)

三种 状态 , 要是你想说 自己不想带 任何 cookie 怎么办? 

         第二种方法, 直接把注释解开就可了, 自己没设置cookie ,就不会带上去。 

有的文章说的, 爬虫的爬取效率问题 就把注释打开了, 就是这个自己没有设置cookie  所以请求的时候不会去验证。

结合自己的 业务需求 来选取设置。 

每个请求需要自己的 cookie、 token的 , 请使用 第二种。 

直接全局可以使用一个cookie 的 、只需要这个字段的 , 用第三种方式。

headers、cookie单独设立 ,两者的cookie 相斥, 简单理解就是 有 headers (第二种), 单独设置的cookie(第三种 就会失效),反之亦然。 

故此:三种状态  已讲清晰。 还有疑问的  可留言。 

  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值