📜  Scrapy-日志记录(1)

📅  最后修改于: 2023-12-03 15:34:52.439000             🧑  作者: Mango

Scrapy-日志记录

简介

Scrapy是一个非常强大的Python爬虫框架,支持异步和多线程,同时还提供了强大的日志记录功能。在项目中使用日志记录可以方便我们跟踪程序的执行过程,发现问题并进行排除。本文将重点介绍Scrapy日志记录的相关内容。

Scrapy日志模块

Scrapy的日志模块是基于Python的标准logging模块开发的。Scrapy默认使用的日志级别是INFO。Scrapy日志模块包含以下内容:

  • Loggers:记录器。产生日志记录并发送到指定的处理器。
  • Handlers:处理器。根据指定的格式打印输出日志记录,可以输出到控制台、文件、数据库等。
  • Formatters:格式化器。指定输出日志的格式。

Scrapy的日志模块通过以下命令进行配置:

import logging

# 配置日志信息
logging.basicConfig(
    level=logging.INFO, # 日志级别,INFO级别及以上的日志信息被输出到控制台
    format='%(asctime)s [%(name)s] %(levelname)s: %(message)s', # 日志格式
    datefmt='%Y-%m-%d %H:%M:%S' # 时间格式
)

另外,Scrapy的底层框架Twisted也提供了一套日志模块,不过目前Scrapy还没有完全使用这套模块。

Scrapy日志级别

Scrapy的日志级别包含以下5个级别:

  • DEBUG:详细的调试信息,通常只有测试阶段使用。
  • INFO:程序运行过程中的重要信息,如开始爬取、结束爬取等。
  • WARNING:程序发现一些不符合预期的行为,但不影响程序的运行。
  • ERROR:程序出现错误,但不影响程序的运行。
  • CRITICAL:程序出现致命的错误,不能继续运行。

使用方式如下:

import logging

logger = logging.getLogger(__name__)

logger.debug('This is a debug message')
logger.info('This is an info message')
logger.warning('This is a warning message')
logger.error('This is an error message')
logger.critical('This is a critical message')
Scrapy日志消息格式

Scrapy默认输出的日志信息格式如下:

2020-10-08 10:03:50 [scrapy.extensions.feedexport] INFO: Stored CSV feed (1 items) in: xxx.csv

其中:

  • 2020-10-08 10:03:50:时间戳。
  • scrapy.extensions.feedexport:记录器的名称。
  • INFO:日志级别。
  • Stored CSV feed (1 items) in: xxx.csv:日志消息内容。

Scrapy日志模块提供了几个占位符,可以方便地对日志消息进行格式化:

  • asctime:时间字符串。
  • name:记录器名字。
  • levelname:日志级别名字。
  • message:日志消息。
Scrapy日志记录器

Scrapy内置了多个日志记录器,每个记录器都有一个名称和一个等级,在项目配置中可以根据需要调整记录器的等级或关闭某个记录器。常用的Scrapy内置日志记录器有以下几个:

  • scrapy:Scrapy框架本身的日志记录器。
  • scrapy.core.scheduler:调度器的日志记录器。
  • scrapy.extensions.feedexport:数据导出器的日志记录器。
  • scrapy.middleware:中间件的日志记录器。
  • scrapy.spiders:爬虫的日志记录器。

以下是关闭scrapy.core.scheduler日志记录器的示例代码:

LOG_ENABLED = True
LOG_LEVEL = 'INFO'
LOG_FORMAT = '%(asctime)s [%(name)s] %(levelname)s: %(message)s'
LOG_DATEFORMAT = '%Y-%m-%d %H:%M:%S'
LOG_FILE = 'log.txt'

LOG_DISABLED = ['scrapy.core.scheduler']

for logger_name in LOG_DISABLED:
    logging.getLogger(logger_name).propagate = False
Scrapy日志输出到文件

Scrapy日志模块可以将日志输出到文件,以保留更为详细的日志信息。在配置中添加以下代码即可:

LOG_ENABLED = True
LOG_LEVEL = 'INFO'
LOG_FORMAT = '%(asctime)s [%(name)s] %(levelname)s: %(message)s'
LOG_DATEFORMAT = '%Y-%m-%d %H:%M:%S'

# 输出到文件,与控制台输出互斥
LOG_FILE = 'log.txt'
总结

本文介绍了Scrapy日志记录的相关内容,包括Scrapy日志模块、Scrapy日志级别、Scrapy日志消息格式、Scrapy日志记录器以及Scrapy输出到文件。通过日志记录,可以更好地跟踪程序的执行情况,及时发现并解决问题。