爬虫保存cookies时重要的两个参数(ignore_discard和ignore_expires)的作用

代码如下:(由于临时做的实例采用登录云打码平台的cookies)

import requests
from lxml.html import etree
from fake_useragent import UserAgent
from http.cookiejar import LWPCookieJar
from ydm import shibie


session = requests.Session()
session.cookies = LWPCookieJar(filename='ydm.txt')

try:
    session.cookies.load('ydm.txt', ignore_discard=True, ignore_expires=True)
    print('本地cookie加载完成')
except Exception as e:
    print('')

ua = UserAgent()
headers = {
    'headers': ua.random,
}


def get_captcha_image():
    content = session.get('http://www.yundama.com/index/captcha', headers=headers).content
    with open('captcha.jpg', 'wb') as f:
        f.write(content)


def login():
    get_captcha_image()

    # 验证码保存到本地以后,对验证码进行识别
    result = shibie('captcha.jpg')

    print('识别结果:', result)

    response = session.get('http://www.yundama.com/index/login?username=gaohairui&password=gao12345&utype=1&vcode={}'.format(result))

    print(response.text)

    session.cookies.save(ignore_discard=True, ignore_expires=True)

if __name__ == '__main__':
    login()


不难看出最后的保存的两个参数:ignore_discard和ignore_expires

 session.cookies.save(ignore_discard=True, ignore_expires=True)

两个参数的作用:

    官方的解释:

ignore_discard: save even cookies set to be discarded.
ignore_expires: save even cookies that have expired.The file is overwritten if it already exists

    不难看出两个参数的实际作用是:ignore_discard的意思是即使cookies将被丢弃也将它保存下来,ignore_expires的意思       是如果cookies已经过期也将它保存并且文件已存在时将覆盖,在这里,我们将这两个全部设置为True。运行之后,cookies       将被保存到ydm.txt文件中。

    查看一下内容:


    















<think>好的,我现在需要回答用户关于Ansible中`force_handlers``ignore_errors`的问题。用户之前已经询问过关于Playbook中的标量变量,现在这个问题也是关于Ansible特性的,所以可能需要保持类似的详细程度结构。 首先,我需要回忆这两个关键字的具体作用用法。`force_handlers`与处理程序(handlers)有关。处理程序通常用于在任务更改后执行某些操作,比如重启服务。默认情况下,处理程序会在Play的末尾执行,但如果任务失败,处理程序可能不会触发。而`force_handlers`的作用可能是在即使有任务失败的情况下,仍然强制执行处理程序。需要确认这一点,可能需要查阅Ansible文档或可靠资料。 然后是`ignore_errors`,这个我记得是用来忽略任务中的错误,即使某个任务失败,Playbook也会继续执行后续任务。但需要详细说明它的应用场景,比如在测试或非关键任务中使用,避免整个Playbook因为一个小错误而终止。同,可能需要注意与`failed_when`的区别,后者是自定义失败条件,而`ignore_errors`是直接忽略错误。 接下来,用户可能需要两者的对比,所以应该分点解释,再总结区别。需要确保结构清晰,每个部分有示例或使用场景,帮助用户理解何使用哪个选项。 还要考虑用户可能的疑问,比如在使用`force_handlers`,是否所有处理程序都会执行,或者仅与已触发任务相关的处理程序。此外,`ignore_errors`是否会影响错误报告,比如虽然任务继续执行,但错误是否会被记录。 需要检查是否有常见的错误使用情况,比如滥用`ignore_errors`导致隐藏重要问题,或者误用`force_handlers`导致在失败状态下执行不应进行的处理程序。可能需要给出最佳实践的建议,比如谨慎使用这些选项,仅在必要使用。 最后,确保语言简洁明了,使用中文,避免技术术语过于晦涩,必要提供示例代码片段,但用户提供的Playbook中没有使用这两个关键字,所以可能需要构造简单的示例来说明。</think>以下是关于Ansible中 **`force_handlers`** **`ignore_errors`** 的详细说明,通过对比帮助您理解两者的区别与用途: --- ### **1. force_handlers** #### **功能** - **强制运行处理程序(Handlers)**: 默认情况下,Ansible仅在任务(Tasks)状态为 **`changed`** 触发关联的处理程序,且如果Playbook执行过程中有任务失败,已触发的处理程序会被跳过。 `force_handlers: yes` 会强制在**即使后续任务失败**,仍执行已触发的处理程序。 #### **使用场景** - 确保关键的后置操作(如服务重启、配置生效)**必须执行**,即使后续任务失败。 - 例如:更新配置文件后必须重启服务,但后续某个验证任务失败,此仍需重启服务。 #### **示例** ```yaml - hosts: web_servers force_handlers: yes # 强制运行已触发的处理程序 tasks: - name: Update Nginx config template: src: nginx.conf.j2 dest: /etc/nginx/nginx.conf notify: Restart Nginx # 触发处理程序 handlers: - name: Restart Nginx service: name: nginx state: restarted ``` --- ### **2. ignore_errors** #### **功能** - **忽略任务失败**: 当某个任务执行失败,Ansible默认会终止整个Playbook。通过 `ignore_errors: yes` 可让Playbook**继续执行后续任务**,无论当前任务是否失败。 #### **使用场景** - 允许非关键任务失败(如日志收集、可选的依赖检查)。 - 调试绕过错误,观察后续任务行为。 #### **示例** ```yaml - hosts: db_servers tasks: - name: Check disk space (非关键任务) command: df -h ignore_errors: yes # 即使此任务失败,继续执行 - name: Install MySQL yum: name: mysql-server state: installed # 关键任务,失败会终止(除非也设置 ignore_errors) ``` --- ### **对比总结** | 特性 | `force_handlers` | `ignore_errors` | |---------------------|---------------------------------|----------------------------------| | **作用对象** | 处理程序(Handlers) | 任务(Tasks) | | **触发条件** | 任务失败强制执行已触发的处理程序 | 任务失败继续执行后续任务 | | **典型用途** | 确保关键后置操作必须完成 | 容忍非关键任务失败 | | **作用范围** | 整个Play级别 | 单个任务级别 | --- ### **注意事项** 1. **`force_handlers`** 需谨慎使用: - 若处理程序依赖前置任务的完整成功(如配置未完全生成重启服务),可能导致不一致状态。 2. **`ignore_errors`** 避免滥用: - 隐藏错误可能导致后续任务依赖错误数据,建议配合 `failed_when` 或 `block/rescue` 结构控制流程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值