Python爬蟲5.5 — scrapy框架logging模塊的使用

綜述

本系列文檔用於對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被忽略

其他博文鏈接

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章