一、爬虫狗的悲惨世界:谁没被print坑过?
夜深人静,你正在疯狂爬取某个网站的数据。突然,程序卡住了。你习惯性地翻看日志,却发现满屏都是:
正在爬取第1页...
正在爬取第2页...
数据保存成功
正在爬取第3页...
遇到验证码!
...(后面是999+行无关信息)
等等!“遇到验证码!”——这个关键错误被淹没在信息的海洋里,等你发现时,IP已经被封了。
这就是大多数爬虫新手(甚至一些老手)的日常:用print打天下。print就像是你家里那个只会说“饭好了”、“水开了”的笨拙助理,关键时刻永远给不了你想要的信息。
二、logging:Python内置的“智能秘书”
是时候请出Python标准库中的隐藏大佬——logging模块了。如果说print是个实习生,那logging就是拥有博士学位的专业秘书。
logging的超级技能:
- 分级管理:DEBUG、INFO、WARNING、ERROR、CRITICAL,重要程度一目了然
- 多路输出:同时输出到控制台、文件、邮件,甚至网络
- 灵活格式:时间、文件名、行号、自定义信息,想要什么有什么
- 自动分割:按时间、按文件大小,告别单个巨型日志文件
但是!原生的logging配置起来稍微有点复杂,这也是为什么我们要打造自己的“瑞士军刀”——myLg模块。
三、手把手打造你的日志神器myLg
3.1 设计目标:我们想要的理想日志
在开始造轮子前,先想清楚我们要什么:
- 简单调用:3行代码搞定配置
- 彩色控制台:错误红色、警告黄色、信息绿色
- 文件记录:自动按日期分割日志文件
- 爬虫特化:专门为爬虫场景优化
3.2 核心代码实现
创建一个myLogger.py文件:
import logging
import os
from logging.handlers import TimedRotatingFileHandler
import colorlog
import sys
class MyLogger:
def __init__(self, name='mySpider', log_level='DEBUG', file_path='./logs/'):
"""
爬虫专用日志模块
:param name: 日志器名称
:param log_level: 日志级别
:param file_path: 日志文件路径
"""
self.logger = logging.getLogger(name)
self.logger.setLevel(getattr(logging, log_level.upper()))
# 避免重复添加handler
if not self.logger.handlers:
self._setup_console_handler()
self._setup_file_handler(file_path)
d

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



