如何在Python中解析requests.session的Cookie属性
嘿,我来帮你搞定这个Cookie属性的问题!其实RequestsCookieJar本身是可迭代的容器,里面的每一项都是完整的Cookie对象——你看到的expires、domain这些属性,都可以直接通过点语法访问,只是你之前用的方法没触达而已。
单个Cookie的属性访问
如果你知道目标Cookie的名称,直接通过键名取出Cookie对象,然后就能访问它的所有属性了:
# 取出指定名称的Cookie对象 target_cookie = s.cookies['COOKIE_NAME'] # 访问expires属性 print(f"过期时间(Unix时间戳): {target_cookie.expires}") # 其他属性也可以直接获取 print(f"Cookie名称: {target_cookie.name}") print(f"所属域名: {target_cookie.domain}") print(f"是否启用Secure: {target_cookie.secure}") print(f"是否HttpOnly: {target_cookie.rest.get('HttpOnly') is not None}")
注意:如果是会话Cookie(比如你例子里的
discard=True),expires会返回None,这类Cookie会在浏览器关闭后失效。
遍历所有Cookie并检查属性
当存在多个Cookie时,直接遍历RequestsCookieJar即可逐个处理每个Cookie:
# 遍历所有Cookie对象 for cookie in s.cookies: print(f"=== Cookie: {cookie.name} ===") print(f"值: {cookie.value}") print(f"过期时间: {cookie.expires}") print(f"域名: {cookie.domain}") print(f"路径: {cookie.path}") print(f"Secure属性: {cookie.secure}") print(f"HttpOnly属性: {'是' if cookie.rest.get('HttpOnly') else '否'}") print("------------------------")
将单个Cookie转为自定义字典
如果你需要把Cookie的所有关键属性打包成字典,可以自己构造:
def cookie_to_dict(cookie): return { 'name': cookie.name, 'value': cookie.value, 'expires': cookie.expires, 'domain': cookie.domain, 'path': cookie.path, 'secure': cookie.secure, 'httponly': cookie.rest.get('HttpOnly') is not None } # 转换单个Cookie my_cookie_dict = cookie_to_dict(s.cookies['COOKIE_NAME']) print(my_cookie_dict) # 转换所有Cookie为字典列表 all_cookies_dict = [cookie_to_dict(cookie) for cookie in s.cookies] print(all_cookies_dict)
为什么之前的方法不行?
s.cookies.get_dict()本来就是设计只返回name: value的键值对,所以看不到其他属性;s.cookies['expires']是错误的用法,因为RequestsCookieJar的键是Cookie的名称,而不是属性名,所以这样会返回None(找不到名为expires的Cookie)。
内容的提问来源于stack exchange,提问作者Frostbyte
相关产品推荐
相关产品推荐

