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

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 解释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
目录
相关文章
|
19天前
|
安全 PHP
从建站到拿站 -- PHP(Cookie设置)
从建站到拿站 -- PHP(Cookie设置)
23 0
|
19天前
|
数据采集 中间件 Python
Scrapy框架 -- 中间件介绍
Scrapy框架 -- 中间件介绍
21 0
|
10月前
|
JavaScript
js设置、修改、获取、删除 cookie
js设置、修改、获取、删除 cookie
131 0
|
19天前
|
存储 JavaScript PHP
什么是cookie,如何设置在浏览器页面关闭后清除cookie
什么是cookie,如何设置在浏览器页面关闭后清除cookie
131 0
|
19天前
|
存储 JavaScript 前端开发
百度搜索:蓝易云【php设置和获取Cookie教程。】
需要注意的是,为了确保在向浏览器发送任何输出之前设置Cookie,应该在 `<html>`标签之前或PHP脚本的顶部设置Cookie。
76 0
|
19天前
|
数据采集 监控 中间件
解决HTTP 429错误的Scrapy中间件配置
解决HTTP 429错误的Scrapy中间件配置
|
12月前
|
存储 缓存 JSON
36.从入门到精通:CGI环境变量 GET和POST方法 GET方法 POST方法 CGI中使用Cookie Cookie设置 检索Cookie信息
36.从入门到精通:CGI环境变量 GET和POST方法 GET方法 POST方法 CGI中使用Cookie Cookie设置 检索Cookie信息
|
8月前
|
数据采集 中间件 Python
Scrapy框架 -- 中间件介绍
Scrapy框架 -- 中间件介绍
44 0
|
10月前
|
Java
requests--Cookie设置
requests--Cookie设置
|
10月前
|
中间件 调度 Python
Python Scrapy框架之 Downloader Middleware的使用
Python Scrapy框架之 Downloader Middleware的使用

热门文章

最新文章