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

举报
橙子园 发表于 2022/05/26 00:13:26 2022/05/26
【摘要】 直接给出答案:注释掉COOKIES_ENABLED 解释COOKIES_ENABLED作用: 当COOKIES_ENABLED是注释的时候scrapy默认没有开启cookie当COOKIES_ENAB...

直接给出答案:注释掉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]
            }

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

上面的代码,不用具体纠结是什么意思(这是我从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

  
 
  • 1

下面函数为将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

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

文章来源: blog.csdn.net,作者:橙子园,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/Chenftli/article/details/109649662

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。