Python爬虫教程第7篇-requests模块的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, cookiejar=None, overwrite=True)

保存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, indent=True)

比如下面这个网站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 traceback

import requests.utils

from executor.page_executor import PageExecutor
from file_path import get_absolute_path


cookie_path = get_absolute_path('data/cookie.txt')
request_session: requests.Session = None

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

def get_session():
    global request_session
    if request_session is not None:
        return request_session
    else:
        request_session = requests.Session()
        exist_cookies = __load_cookie()
        if exist_cookies is not None:
            request_session.cookies.update(exist_cookies)

        return request_session

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, indent=True)
    logger.info('cookies saved to ./data/cookie.txt')
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python爬虫中,requests库是非常常用的一个库,它提供了简洁而强大的API来发送HTTP请求。对于使用requests库进行爬虫,以下是一些基本操作和高级用法的介绍: 基本操作: 1. 安装requests库:使用pip命令可以安装requests库,例如:`pip install requests`。 2. 导入requests库:在Python脚本中导入requests库,例如:`import requests`。 3. 发起GET请求:使用requests库的get方法可以发起GET请求,例如:`response = requests.get(url)`。 4. 发起POST请求:使用requests库的post方法可以发起POST请求,例如:`response = requests.post(url, data)`。 5. 响应内容:通过response对象可以获取请求的响应内容,例如:`response.text`返回响应内容的字符串形式。 高级用法: 1. 请求头部信息:可以通过headers参数来设置请求头部信息,例如:`headers = {"User-Agent": "Mozilla/5.0"}`,然后将headers作为参数传入GET或POST请求中。 2. 发送参数:可以通过params参数来发送请求参数,例如:`params = {"key": "value"}`,然后将params作为参数传入GET请求中。 3. 发送数据:可以通过data参数来发送POST请求的数据,例如:`data = {"key": "value"}`,然后将data作为参数传入POST请求中。 4. 文件上传:可以通过files参数来上传文件,例如:`files = {"file": open("filename", "rb")}`,然后将files作为参数传入POST请求中。 5. 超时设置:可以通过timeout参数来设置请求的超时时间,例如:`timeout = 5`,表示设置超时时间为5秒。 6. 会话管理:可以使用Session对象来管理会话,例如:`session = requests.Session()`,然后可以使用session对象发送多个请求,会话对象会自动保存使用Cookies信息。 7. 重定向处理:可以通过allow_redirects参数来控制是否允许重定向,默认为True,可以设置为False来禁止重定向。 8. SSL验证:可以通过verify参数来控制SSL证书验证,默认为True,可以设置为False来禁止验证。 总结:以上是Python爬虫使用requests库的一些基本操作和高级用法。你可以根据具体的需求来选择合适的方法和参数来发送HTTP请求,并获取响应内容。记得根据实际情况进行异常处理和错误判断,以保证爬虫的稳定性和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值