掌握Python爬虫的四大组件之Handler(处理器)

源码分享
https://docs.qq.com/sheet/DUHNQdlRUVUp5Vll2?tab=BB08J2

在构建高效的Python爬虫时,理解和应用日志组件是至关重要的。在前一章节中,我们探讨了Logger(记录器)的概念和基础用法。本章节,我们将聚焦于Logger的另一个核心组件——Handler(处理器)。Handler负责将日志记录(由Logger生成)发送到指定的目的地,无论是控制台、文件、网络或其他日志存储系统。本篇博客将详细介绍如何在Python爬虫中使用Handler,并提供实用的代码示例。

Handler组件概述

在Python的​​logging​​模块中,Handler负责决定日志的去向。它可以是标准输出(控制台),一个文件,一个网络套接字,甚至是多个目的地。每个Logger可以有多个Handler,这意味着可以同时将日志发送到多个地方,例如同时在控制台打印和写入文件。

Handler配置

让我们从配置几种基本的Handler开始:

控制台Handler

import logging# 创建一个Logger
logger = logging.getLogger('spider')
logger.setLevel(logging.DEBUG)  # 设置Logger的日志级别# 创建一个流Handler,用于输出到控制台
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.INFO)  # 设置控制台Handler的日志级别# 设置日志格式
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
console_handler.setFormatter(formatter)# 将Handler添加到Logger
logger.addHandler(console_handler)

文件Handler

# 创建一个文件Handler,用于写入日志文件
file_handler = logging.FileHandler('spider.log')
file_handler.setLevel(logging.DEBUG)  # 设置文件Handler的日志级别
file_handler.setFormatter(formatter)  # 重复使用前面定义的格式# 将Handler添加到Logger
logger.addHandler(file_handler)

高级Handler用法

在更复杂的应用中,您可能希望日志被旋转(例如每天一个日志文件),或者在日志文件达到一定大小后进行分割。​​RotatingFileHandler​​和​​TimedRotatingFileHandler​​是两个非常有用的Handler,它们能够帮助实现这些需求。

from logging.handlers import RotatingFileHandler# 创建一个RotatingFileHandler
rotating_handler = RotatingFileHandler('spider.log', maxBytes=1024, backupCount=3)
rotating_handler.setLevel(logging.DEBUG)
rotating_handler.setFormatter(formatter)logger.addHandler(rotating_handler)

日志记录实例

接下来是一个使用定义好的Logger和Handler的爬虫记录过程的例子:

class MySpider:def __init__(self, logger=None):self.logger = logger or logging.getLogger(__name__)def fetch(self, url):# 记录信息级别的日志self.logger.info(f"Fetching URL: {url}")# 在这里实现实际的网络请求...def parse(self, html_content):# 记录调试级别的日志self.logger.debug(f"Parsing content: {html_content[:100]}")# 在这里实现实际的内容解析...# 使用爬虫,并记录过程
logger = logging.getLogger('spider')
spider = MySpider(logger=logger)spider.fetch('http://example.com')
# 假设fetch方法获取到了网页内容
fake_html_content = "<html>Some content</html>"
spider.parse(fake_html_content)

结语

Handler是Python​​logging​​模块中非常强大的一个组件,它为我们提供了灵活的日志管理方式,帮助我们将日志输出到各种目的地。在爬虫应用中,合理配置和使用Handler不仅能够帮助我们在开发阶段高效调试,还能在生产环境中监控爬虫的性能和状态。通过本篇教程,您应该能够掌握如何在您的爬虫项目中配置和使用Handler了。请记住,根据您的具体需求,灵活配置Logger和Handler的日志级别和格式,是保障爬虫项目成功的关键。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/673752.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024年Java架构篇之设计模式

2024年Java实战面试题_java 5 年 面试-CSDN博客 1、单例模式

IAR报错:Error[Pa045]: function “halUartInit“ has no prototype

在IAR工程.c文件末尾添加一个自己的函数&#xff0c;出现了报错Error[Pa045]: function "halUartInit" has no prototype 意思是没有在开头添加函数声明&#xff0c;即void halUartInit(void); 这个问题我们在keil中不会遇到&#xff0c;这是因为IAR编译器规则的一…

已解决java.sql.SQLSyntaxErrorException: Unknown database异常的正确解决方法,亲测有效!!!

已解决java.sql.SQLSyntaxErrorException: Unknown database异常的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 文章目录 报错问题解决思路解决方法交流 报错问题 java.sql.SQLSyntaxErrorException: Unknown database 解决思路 对于出现 “java.…

FPGA_vga显示

一 VGA 1.1 VGA VGA是视频图像阵列&#xff0c;是一种使用模拟信号进行视频传输的标准协议。 1.2 VGA接引脚定义 VGA分公母两种&#xff0c;RGB显示标准。 1.3 VGA显示器 VGA显示器采用图像扫描的方式进行图像显示&#xff0c;将构成图像的像素点&#xff0c;在行同步信号…

7机器人位姿的数学描述与坐标变

由上次刚体的空间转动直接切换为机器人相关术语。 1.机器人位姿的数学描述与坐标变换 1.1位姿描述 {B}相对于{A}的姿态描述用3x3矩阵表示为&#xff1a; 式中为三个单位正交主矢量&#xff0c;分别表示刚体坐标系{B}的三个坐标轴XBYBZB在参考系{A}中的方位&#xff0c;∠XBXA表…

leetcode(滑动窗口)483.找到字符中所有字母异位词(C++详细解释)DAY4

文章目录 1.题目示例提示 2.解答思路3.实现代码结果 4.总结 1.题目 给定两个字符串 s 和 p&#xff0c;找到 s 中所有 p 的 异位词 的子串&#xff0c;返回这些子串的起始索引。不考虑答案输出的顺序。 异位词 指由相同字母重排列形成的字符串&#xff08;包括相同的字符串&a…

vivado GATED_CLOCK、IOB、IO_BUFFER_TYPE、KEEP、KEEP_HIERARCHY、MARK_DEBUG

Vivado合成允许门控时钟的转换。要执行此转换&#xff0c;请使用&#xff1a; •Vivado IDE中的一个开关&#xff0c;指示工具尝试转换。 •GATED_CLOCK RTL属性或XDC属性&#xff0c;指示工具关于哪个信号在门控逻辑中是时钟。将此属性放置在作为时钟的信号或端口上。要控制…

ChatGPT 3.5与4.0:深入解析技术进步与性能提升的关键数据

大家好&#xff0c;欢迎来到我的博客&#xff01;今天我们将详细比较两个引人注目的ChatGPT版本——3.5和4.0&#xff0c;通过一些关键数据来深入解析它们之间的差异以及4.0版本的技术进步。 1. 模型规模与参数 ChatGPT 3.5&#xff1a; 参数数量&#xff1a;约1.7亿个模型层数…

后端创建订单

package com.java1234.entity;import io.jsonwebtoken.Claims;/*** jwt验证信息* author java1234_小锋* site www.java1234.com* company Java知识分享网* create 2019-08-13 上午 10:00*/ public class CheckResult {private int errCode;private boolean success;private Cl…

JUnit5单元测试框架提供的注解

目录 第一章、注释在类上的注解1.1&#xff09;JUnit5注释在类上的注解集成测试&#xff1a;SpringBootTest集成测试&#xff1a;ExtendWith(SpringExtension.class)单元测试&#xff1a;ExtendWith(MockitoExtension.class)切片测试:WebMvcTest和DataJpaTest<font colorred…

开源软件对技术以及行业发展的影响

开源软件和代码对技术发展和行业产生了广泛而深远的影响。以下是一些主要方面的深入分析&#xff1a; 1. 协作和共享&#xff1a; 技术发展&#xff1a; 开源项目提供了一个集体协作和共享的平台&#xff0c;吸引了全球各地的开发者共同参与。这种协同工作模式推动了技术的快…

OpencV入门讲解

OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一个开源的计算机视觉和机器学习软件库&#xff0c;它提供了丰富的功能&#xff0c;用于开发实时图像处理、视频分析、物体识别、机器学习等应用。以下是OpenCV入门的基本讲解&#xff1a; OpenCV的核心概…

Linux内核与驱动面试经典“小”问题集锦(5)

接前一篇文章&#xff1a;Linux内核与驱动面试经典“小”问题集锦&#xff08;4&#xff09; 问题6 问&#xff1a;mutex_lock和mutex_lock_interruptible的区别是什么&#xff1f; 备注&#xff1a;此问题也是笔者近期参加蔚来面试时遇到的一个问题。 答&#xff1a; 尽管…

前端JavaScript篇之数组的遍历方法有哪些?forEach和map方法有什么区别?

目录 数组的遍历方法有哪些&#xff1f;forEach和map方法有什么区别&#xff1f;forEach()map()filter()for…ofevery() 和 some()find() 和 findIndex()reduce() 和 reduceRight()forEach和map方法有什么区别总结 数组的遍历方法有哪些&#xff1f;forEach和map方法有什么区别…

【Unity】QFramework通用背包系统优化:使用Odin优化编辑器

前言 在学习凉鞋老师的课程《QFramework系统设计&#xff1a;通用背包系统》第四章时&#xff0c;笔者使用了Odin插件&#xff0c;对Item和ItemDatabase的SO文件进行了一些优化&#xff0c;使物品页面更加紧凑、更易拓展。 核心逻辑和功能没有改动&#xff0c;整体代码量减少…

深度学习(15)--PyTorch构建卷积神经网络

目录 一.PyTorch构建卷积神经网络(CNN)详细流程 二.graphviz torchviz使PyTorch网络可视化 2.1.可视化经典网络vgg16 2.2.可视化自己定义的网络 一.PyTorch构建卷积神经网络(CNN)详细流程 卷积神经网络&#xff08;Convolutional Neural Networks&#xff09;是一种深度学…

PHP入门指南:进阶篇

PHP入门指南&#xff1a;进阶篇 PHP入门指南&#xff1a;进阶篇1. 面向对象编程&#xff08;OOP&#xff09;1.1 类和对象的基本概念1.2 构造函数和析构函数1.3 属性和方法的访问控制1.4 继承与多态 2. 错误和异常处理2.1 错误处理机制2.2 异常处理机制2.3 自定义异常类 3. PHP…

k8s弃用docker后使用ctr导入镜像

很多公司的k8s安装比较早,在生产环境一般很少升级,因此还是老版本,在使用新版本的时候,容易陷入老版本的思维中,从而掉坑,这里记录一下整个排查过程,希望对遇到类似的同学起到一定的帮助。 k8s 抛弃弃用docker 学习容器技术的过程中,我看到有不少同学留言问 Kubernet…

公司大数据展示模板【大屏可视化项目案例-23】

文章目录 一.公司大数据展示模板【大屏可视化项目案例-23】1.1 项目背景1.2 项目效果截图二.项目页面分析2.1 呈现效果页面分析2.2 页面加载时隐藏加载动画2.3 样式布局三.本案例完整源码下载一.公司大数据展示模板【大屏可视化项目案例-23】 1.1 项目背景 随着业务规模的不断…

Hadoop搭建(完全分布式)

节点分布&#xff1a; bigdata-masterbigdata-slave1bigdata-salve2 NameNode NodeManager NodeManager SecondaryNameNodeDataNodeDataNodeResourceManagerNodeManagerDataNode 目录 一、jdk安装&#xff1a; 二、hadoop安装 一、jdk安装&#xff1a; jdk-8u212链接&am…