解决scrapy设置cookie中间件时遇到的问题

本文涉及的产品
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
注册配置 MSE Nacos/ZooKeeper,118元/月
云原生网关 MSE Higress,422元/月
简介: 解释COOKIES_ENABLED作用:* 当COOKIES_ENABLED是注释的时候scrapy默认没有开启cookie* 当COOKIES_ENABLED没有注释设置为False的时候scrapy默认使用了settings里面的cookie* 当COOKIES_ENABLED设置为True的时候scrapy就会把settings的cookie关掉,使用自定义cookie

直接给出答案:注释掉COOKIES_ENABLED

解释COOKIES_ENABLED作用:

  • 当COOKIES_ENABLED是注释的时候scrapy默认没有开启cookie
  • 当COOKIES_ENABLED没有注释设置为False的时候scrapy默认使用了settings里面的cookie
  • 当COOKIES_ENABLED设置为True的时候scrapy就会把settings的cookie关掉,使用自定义cookie
补充:downloader中间件下如何实现请求携带cookie

在scrapy项目中的middlewares文件中添加如下代码:

class CookieMiddleware(object):
    def __init__(self):
        self.coll = db.conn['book_rwyxw_crawl']['login_cookies']

    def process_request(self, request, spider):
        if spider.name == 'refer_detail_spider':
            cookie_str = str(self.coll.find_one({'uid': '1'}, {'_id': 0})['cookies'])
            cookie_list = cookie_str.split('=')
            print(cookie_list[0], cookie_list[1][:-1])
            request.cookies = {
                cookie_list[0]: cookie_list[1][:-1]
            }

上面的代码,不用具体纠结是什么意思(这是我从mongo里拿对应账户的cookie),你只要知道创建一个中间件类CookieMiddleware(名字随便), 然后在定义的process_request方法中写你添加cookies的逻辑就好。
注意:通常返回给你的cookie是一个像下面的字符串,你需要去切分出来,给request.cookies传递字典或者json格式的数据

JSESSIONID=7E13FFCA22B71B3B28CBD397163AB5D4; UniqueID=DYR5OYcUdC2PG6OG1604986933643; Sites=_20003; right_status=1; left_status=0; undefined_vq=192

下面函数为将cookies字符串转化成dict

def transform(cookies):
    cookie_dict = {}
    cookies = cookies.replace(' ','')
    lis = cookies.split(';')
    for i in lis:
        key = i.split('=')[0]
        value = i.split('=')[1]
        cookies_dict[key] = value
    return cookies_dict
目录
相关文章
|
6月前
|
安全 PHP
从建站到拿站 -- PHP(Cookie设置)
从建站到拿站 -- PHP(Cookie设置)
44 0
|
1月前
|
数据采集 中间件 开发者
Scrapy爬虫框架-自定义中间件
Scrapy爬虫框架-自定义中间件
|
3月前
|
存储
【Azure APIM】APIM 策略语句如何来设置多个Cookie值让浏览器保存
【Azure APIM】APIM 策略语句如何来设置多个Cookie值让浏览器保存
|
3月前
|
Java 应用服务中间件 nginx
【Azure 环境】Azure应用程序网关设置set_Cookie=key=value; SameSite=Strict; HTTPOnly,AzureAD登录使用cookie时使用不了的案例记录
【Azure 环境】Azure应用程序网关设置set_Cookie=key=value; SameSite=Strict; HTTPOnly,AzureAD登录使用cookie时使用不了的案例记录
|
3月前
|
JSON JavaScript 前端开发
Vue项目使用Cookie,以Json格式存入与读取Cookie,设置过期时间以及删除操作
这篇文章介绍了在Vue项目中如何使用JavaScript操作Cookie,包括设置、读取、设置过期时间以及删除Cookie的方法。
269 0
|
5月前
|
JavaScript API
蓝易云 - 如何使用CORS来允许设置Cookie
以上就是使用CORS来允许设置Cookie的方法。
32 2
|
5月前
|
JavaScript 前端开发 数据安全/隐私保护
JS中使用Cookie实现记住密码以及设置密码过期时间
JS中使用Cookie实现记住密码以及设置密码过期时间
99 0
|
6月前
|
数据采集 监控 中间件
解决HTTP 429错误的Scrapy中间件配置
解决HTTP 429错误的Scrapy中间件配置
|
6月前
|
数据采集 中间件 Python
Scrapy框架 -- 中间件介绍
Scrapy框架 -- 中间件介绍
56 0
|
6月前
|
存储 JavaScript PHP
什么是cookie,如何设置在浏览器页面关闭后清除cookie
什么是cookie,如何设置在浏览器页面关闭后清除cookie
382 0