解决scrapy设置cookie中间件时遇到的问题
【摘要】
直接给出答案:注释掉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)