网站权重怎么做的,wordpress 开发 主题授权,百度sem是什么意思,企业网站申请流程文章目录 为什么要保存cookiesrequests.utils工具类保存cookies到本地文件从本地文件解析cookies使用使用实践 为什么要保存cookies
保存cookies是避免每次都登录获取权限#xff0c;一遍权限是有过期时间的#xff0c;不需要每次重复登录#xff0c;可以将cookies保存起来… 文章目录 为什么要保存cookiesrequests.utils工具类保存cookies到本地文件从本地文件解析cookies使用使用实践 为什么要保存cookies
保存cookies是避免每次都登录获取权限一遍权限是有过期时间的不需要每次重复登录可以将cookies保存起来用的时候再加载。适用于多机器并发式爬取数据或者抢票等功能。
requests.utils工具类
需要使用request.utils工具类进行解析cookie从CookieJar转为字典从字典转为CookieJar需要特殊的操作。
# 将CookieJar转为字典
cookie_dict requests.utils.dict_from_cookiejar(r.cookies)# 将字典转为CookieJar
cookies requests.utils.cookiejar_from_dict(cookie_dict, cookiejarNone, overwriteTrue)保存cookies到本地文件
def save_cookie():# 登录成功, session里的cookie是最全的response返回的cookie不全cookiejar requests.utils.dict_from_cookiejar(request_session.cookies)with open(cookie_path, w) as f:json.dump(cookiejar, f, indentTrue)比如下面这个网站cookie的保存内容
从本地文件解析cookies
def __load_cookie():加载本地cookie如果存在加载如果不存在就返回空:param session::return:try:with open(cookie_path, r) as f:load_cookie json.load(f)return requests.utils.cookiejar_from_dict(load_cookie)except Exception as e:traceback.print_exc()return None使用
将从本地解析出来的cookies同步到session中
request_session requests.Session()
exist_cookies requests.utils.cookiejar_from_dict(load_cookie)
request_session.cookies.update(exist_cookies)使用实践
下面这个例子使用session方式请求登录成功之后会调用save()保存cookie每次重新启动程序会先加载cookies
import json
import tracebackimport requests.utilsfrom executor.page_executor import PageExecutor
from file_path import get_absolute_pathcookie_path get_absolute_path(data/cookie.txt)
request_session: requests.Session Nonedef __load_cookie():加载本地cookie如果存在加载如果不存在就返回空:param session::return:try:with open(cookie_path, r) as f:load_cookie json.load(f)return requests.utils.cookiejar_from_dict(load_cookie)except Exception as e:traceback.print_exc()return Nonedef get_session():global request_sessionif request_session is not None:return request_sessionelse:request_session requests.Session()exist_cookies __load_cookie()if exist_cookies is not None:request_session.cookies.update(exist_cookies)return request_sessiondef save_cookie():# 登录成功, session里的cookie是最全的response返回的cookie不全cookiejar requests.utils.dict_from_cookiejar(request_session.cookies)with open(cookie_path, w) as f:json.dump(cookiejar, f, indentTrue)logger.info(cookies saved to ./data/cookie.txt)