python异步中aiohttp获取不到正确的Set-cookies值?

小白新学异步,想用在之前的爬虫中。
其中某个请求需要请求多次,并且会返回一个set-cookie值,给该请求套上异步。
但请求返回了一个没有更新的set-cookie值(跟请求前的那个cookie一样),代码在链接里
https://blog.csdn.net/weixin_44766609/article/details/106767353

第1个回答  2020-08-25

python异步中aiohttp获取不到正确的Set-cookies值


这几天学习了python的异步请求,想修改之前写的代码提高请求效率,但遇到一个包含set-cookie返回的请求无法获取正确的cookie值

原程序关键代码(单线程)(重点看print()输出内容):

def enter_study(num, course):  # 进入每个课群的每个课程记录每个章节url
global lesson_url  # 章节
header['Referer'] = re.search(r'http.*?course', qun_course_url[num][course]).group() + 's'
print(session.cookies)  # 打印当前网站的cookies
print('\n\n\n')
while True:
try:
request = session.get(qun_course_url[num][course], headers=header, timeout=3)  # 进入课程
print(request.cookies)
print(session.cookies)  # 打印当前网站的cookies
input()
break
except Exception as e:
print('进入课程学习重试中。。。')
continue
update_time(1)
update_time(2)
temp_list = []
for x in re.findall(r'/courses/YOOC\S*/">', request.text):
temp_list.append('https://xueyuan.yooc.me' + x[:-2])  # 该课程有多少章节
lesson_url[num][course] = temp_list123456789101112131415161718192021

运行结果(cookies中间空白处因为涉及用户信息所以屏蔽了):

修改后的出现问题的代码(异步)(重点看print()输出内容):

async def enter_study(num, course, header):  # 进入每个课群的每个课程记录每个章节url
async with aiohttp.ClientSession(cookies=cookie) as session:
header['Referer'] = re.search(r'http.*?course', qun_data[num][2][course]).group() + 's'
#打印请求前的cookie记录
print(session.cookie_jar.filter_cookies())
async with session.get(qun_data[num][2][course], headers=header) as html:  # 进入课程
update_time(1)
update_time(2)
print('\n\n')
print(html.cookies)#打印Set-cookie信息
print()
#打印请求后的cookie记录
print(print(session.cookie_jar.filter_cookies()))
if str(html.cookies).find('Set-Cookie') > -1:
save_cookie_record['Set-Cookie'] = html.cookies
rep_text = await html.text(encoding='utf-8')
temp_list = []
for x in re.findall(r'/courses/YOOC\S*/">', rep_text):
temp_list.append('https://xueyuan.yooc.me' + x[:-2])  # 该课程有多少章节
qun_data[num][2][course] = temp_list1234567891011121314151617181920

运行结果(请求后返回的set-cookies信息没有更新):




该程序是用一个cookie字典来保存cookie值的,需要通过请求后的set-cookie值来更新我的cookie字典,为什么用在异步请求上却不行呢?

本回答被网友采纳
第2个回答  2020-06-16

哦豁 参考下这个连接看看网页链接

追问

request.cookies难道不是获取当前请求下返回的set-cookie值吗,在requests库中可以正确返回,但是在异步中返回的不对,是我的程序写错了吗

追答

你都没看完这个连接

追问

可是我在请求前后已经用这种方法输出一次cookie两次结果还是没有变化

相似回答