欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python爬虫5.5 — scrapy框架logging模块的使用

程序员文章站 2022-05-12 10:35:08
...

综述

本系列文档用于对Python爬虫技术的学习进行简单的教程讲解,巩固自己技术知识的同时,万一一不小心又正好对你有用那就更好了。
Python 版本是3.7.4

本篇文章主要讲解日志模块(logging)的使用。

log 介绍

在第一篇入门文章中我们嫌打印的日志信息过多,稍微对日志设置了一下打印等价:

LOG_LEVEL = "WARNING"

仅打印WARNING等级及其以上的日志信息。

关于log等级

Scrapy提供5层logging级别:

  1. CRITICAL - 严重错误(critical)
  2. ERROR - 一般错误(regular errors)
  3. WARNING - 警告信息(warning messages)
  4. INFO - 一般信息(informational messages)
  5. DEBUG - 调试信息(debugging messages)

上述对应等级的信息我们可以分别使用对应的函数进行输出:logging.critical()logging.error()logging.warning()logging.info()logging.debug();输入等级按照设置进行输出。scrapy默认输出DEBUG等级日志。

logging.getLogger()

由于上述设置使用较为不方便,我们可以使用日志模块自带的logging.getLogger()方法进行打印日志,实例代码如下:

import scrapy
import logging

logger = logging.getLogger(__name__)

class Qsbk1SpiderSpider(scrapy.Spider):
    name = 'qsbk1_spider'
    allowed_domains = ['qiushibaike.com']
    start_urls = ['https://www.qiushibaike.com/text/']

    def parse(self, response):
        item = {}
        for i in range(0, 10):
            item['come_from'] = 'qsbk1'
            item['data'] = i
            logger.warning(item)
            yield item

这种用法可以将是在哪个文件中输出的日志打印出来。

日志保存到本地

我们可以在setting.py中进行添加设置:

# 日志打印等级
LOG_LEVEL = "WARNING"
# 日志保存地址
LOG_FILE = './log.log'

设置了LOG_FILE之后,日志将不会在终端控制台中进行输出。

自定义logger

上述我们可以在scrapy中可以使用,但是我们如何在普通代码中进行使用呢?我们可以在项目根目录下新建一个logger.py文件,代码如下:

import logging

logging.basicConfig(
    level=logging.DEBUG,
    format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
    datefmt='%a, %d %b %Y %H:%M:%S',
    # filename='log.log', 
    filemode='w'
)  # 自定义设置日志的输出样式

logging.debug('This is debug message')
logging.info('This is info message')
logging.warning('This is warning message')

运行即可看到相应的打印效果。

logging.basicConfig()函数各参数说明:

  • filename: 指定日志文件名
  • filemode:和file函数意义相同,指定日志文件的打开模式,‘w’或’a’
  • format:指定输出的格式和内容,format可以输出很多有用信息,如上例所示:
  • %(levelno)s:打印日志级别的数值
  • %(levelname)s:打印日志级别名称`
  • %(pathname)s:打印当前执行程序的路径,其实就是sys.argv[0]
  • %(filename)s:打印当前执行程序名
  • %(funcName)s:打印日志的当前函数
  • %(lineno)d:打印日志的当前行号
  • %(asctime)s:打印日志的时间
  • %(thread)d:打印线程ID
  • %(threadName):打印线程名称
  • %(process)d:打印进程ID
  • %(message)s:打印日志信
  • datefmt:指定时间格式,同time.strftime()
  • level:设置日志级别,默认为logging.WARNING
  • stream:指定将日志的输出流,可以指定输出到sys.stderr,sys.stdout或者文件,默认输出到sys.stderr,当stream和filename同时指定时,stream被忽略

其他博文链接