爬虫的日志

yalandskx 2018-08-15 原文

爬虫的日志

1. 为什么要使用添加日志功能

  1. 能够方便的对程序进行调试
  2. 能够记录程序的运行状态,包括错误

2. 日志模块简单使用

  • 日志的等级
import logging
# 日志的五个等级,等级依次递增
# 默认是WARNING等级
logging.DEBUG
logging.INFO
logging.WARNING
logging.ERROR
logging.CRITICAL
# 设置日志等级
logging.basicConfig(level=logging.INFO)
# 使用
logging.debug('DEBUG')
logging.info('INFO')
logging.warning('WARNING')
logging.error('ERROR')
logging.critical('CRITICAL')
  • 捕获异常信息到日志。这里主要需要进行捕获异常才能记录下完整的异常信息
try:
    raise Exception("异常")
except Exception as e:
    logging.exception(e)
  • 日志的输出格式 对于日志的输出格式,我们能够进行自定义,包括输出的内容格式时间格式

format格式说明:


      %(name)s  Logger的名字
      %(levelno)s 数字形式的日志级别
      %(levelname)s 文本形式的日志级别
      %(pathname)s 调用日志输出函数的模块的完整路径名,可能没有
      %(filename)s 调用日志输出函数的模块的文件名
      %(module)s 调用日志输出函数的模块名
      %(funcName)s 调用日志输出函数的函数名
      %(lineno)d 调用日志输出函数的语句所在的代码行
      %(created)f 当前时间,用UNIX标准的表示时间的浮 点数表示
      %(relativeCreated)d 输出日志信息时的,自Logger创建以 来的毫秒数
      %(asctime)s 字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒
      %(thread)d 线程ID。可能没有
      %(threadName)s 线程名。可能没有
      %(process)d 进程ID。可能没有
      %(message)s 用户输出的消息
  • datefmt参数说明:

    %y 两位数的年份表示(00-99)
    %Y 四位数的年份表示(000-9999)
    %m 月份(01-12)
    %d 月内中的一天(0-31)
    %H 24小时制小时数(0-23)
    %I 12小时制小时数(01-12)
    %M 分钟数(00=59)
    %S 秒(00-59)
    %a 本地简化星期名称
    %A 本地完整星期名称
    %b 本地简化的月份名称
    %B 本地完整的月份名称
    %c 本地相应的日期表示和时间表示
    %j 年内的一天(001-366)
    %p 本地A.M.或P.M.的等价符
    %U 一年中的星期数(00-53)星期天为星期的开始
    %w 星期(0-6),星期天为星期的开始
    %W 一年中的星期数(00-53)星期一为星期的开始
    %x 本地相应的日期表示
    %X 本地相应的时间表示
    %Z 当前时区的名称
    %% %号本身
    

3. 利用logger封装日志模块

在scrapy_plus目录下建立utils包 (utility:工具),专门放置工具类型模块,如日志模块log.py 下面的代码内容是固定的,在任何地方都可以使用下面的代码实习日志内容的输出

# scrapy_plus/utils/log.py
import sys
import logging

# 默认的配置
DEFAULT_LOG_LEVEL = logging.INFO    # 默认等级
DEFAULT_LOG_FMT = '%(asctime)s %(filename)s [line:%(lineno)d] %(levelname)s: %(message)s'   # 默认日志格式
DEFUALT_LOG_DATEFMT = '%Y-%m-%d %H:%M:%S'  # 默认时间格式
DEFAULT_LOG_FILENAME = 'log.log'    # 默认日志文件名称


class Logger(object):

    def __init__(self):
        # 1. 获取一个logger对象
        self._logger = logging.getLogger()
        # 2. 设置format对象
        self.formatter = logging.Formatter(fmt=DEFAULT_LOG_FMT,datefmt=DEFUALT_LOG_DATEFMT)
        # 3. 设置日志输出
        # 3.1 设置文件日志模式
        self._logger.addHandler(self._get_file_handler(DEFAULT_LOG_FILENAME))
        # 3.2 设置终端日志模式
        self._logger.addHandler(self._get_console_handler())
        # 4. 设置日志等级
        self._logger.setLevel(DEFAULT_LOG_LEVEL)

    def _get_file_handler(self, filename):
        '''返回一个文件日志handler'''
        # 1. 获取一个文件日志handler
        filehandler = logging.FileHandler(filename=filename,encoding="utf-8")
        # 2. 设置日志格式
        filehandler.setFormatter(self.formatter)
        # 3. 返回
        return filehandler

    def _get_console_handler(self):
        '''返回一个输出到终端日志handler'''
        # 1. 获取一个输出到终端日志handler
        console_handler = logging.StreamHandler(sys.stdout)
        # 2. 设置日志格式
        console_handler.setFormatter(self.formatter)
        # 3. 返回handler
        return console_handler

    @property
    def logger(self):
        return self._logger

 


# 初始化并配一个logger对象,达到单例的
# 使用时,直接导入logger就可以使用
logger = Logger().logger

4. 在框架中使用日志模块

使用参考

# scrapy_plus/core/engine.py
from datetime import datetime

from scrapy_plus.http.request import Request    # 导入Request对象
from scrapy_plus.middlewares.spider_middlewares import SpiderMiddleware
from scrapy_plus.middlewares.downloader_middlewares import DownloaderMiddleware
from scrapy_plus.utils.log import logger    # 导入logger

from .spider import Spider
from .scheduler import Scheduler
from .downloader import Downloader
from .pipeline import Pipeline


class Engine(object):

    ......

    def start(self):
        '''启动整个引擎'''
        start = datetime.now()  # 起始时间
        logger.info("开始运行时间:%s" % start)  # 使用日志记录起始运行时间
        self._start_engine()
        stop = datetime.now()  # 结束时间
        logger.info("开始运行时间:%s" % stop)  # 使用日志记录结束运行时间
        logger.info("耗时:%.2f" % (stop - start).total_seconds())  # 使用日志记录运行耗时

......
发表于 2018-08-15 22:06 奋斗最美 阅读() 评论() 编辑 收藏

 

版权声明:本文为yalandskx原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/yalandskx/p/9484341.html

爬虫的日志的更多相关文章

  1. windows pyspider WEB显示框太小解决方法

    环境:windows7 + chrome + pyspider 解决方法: WEB预览框过小的原因在于页面元素 […]...

  2. python爬虫从小白到高手 Day2 动态页面的爬取

    今天我们说说动态页面的抓取,动态页面的概念不是说网页上的内容是活动的,而是刷新的内容由Ajax加载,页面的UR […]...

  3. 爬虫滑块计算图片之间的距离更加精确

    1.思路 原先图片匹配一般都是缺口匹配全图 优化点: 1.缺口图片匹配缺口所在图片那一行图片可以提高他识别率 […]...

  4. 爬虫与反爬虫的较量-图片反爬

    爬虫与反爬虫的较量-图片反爬 前言 在去年6月吧,刚转行做爬虫的时候,经常拿图片网还有小说网练手,无意中发现一 […]...

  5. 一起学爬虫——PyQuery常用用法总结

    什么是PyQuery PyQuery是一个类似于jQuery的解析网页工具,使用lxml操作xml和html文 […]...

  6. 【Python3爬虫】百度一下,坑死你?

    一、写在前面 这个标题是借用的路人甲大佬的一篇文章的标题(百度一下,坑死你),而且这次的爬虫也是看了这篇文章后 […]...

  7. python requests抓取NBA球员数据,pandas进行数据分析,echarts进行可视化 (前言)

    python requests抓取NBA球员数据,pandas进行数据分析,echarts进行可视化 (前言) […]...

  8. Go语言下载网络图片或文件

    最近闲来无事, 于是就简单学习了下Go语言的基本的用法。由于实践才是最快的学习方法,所以这里就以下载网络图片或 […]...

随机推荐

  1. iOS逆向工程之Theos

    如果你对iOS逆向工程有所了解,那么你对Tweak并不陌生。那么由Tweak我们又会引出Theos, 那么什么 […]...

  2. Docker版本

    Docker版本 第一次接触到安装docker的时候,网上的 安装 有 lxc-docker, docker- […]...

  3. 设计模式-模板方法

    模板方法 关注公众号 JavaStorm 获取更多精彩。 模板方法模式在一个方法中定义了一个算法骨架,并且 f […]...

  4. 在win7中一键安装php、apache、mysql。部署web应用。(用于网络攻防课程)

    1、首先下载phpstduy 下载链接:https://www.xp.cn/download.html     […]...

  5. MySQL数据库的下载和安装(详细)

    下载MySQL数据库 下载方式: 1、 通过官网下载2、我下面文章留下的链接 步骤 通过官网下载 第一步,在百 […]...

  6. 分享一个刷爆朋友圈、疯传微信群的公众号吸粉心得

    公众号增粉的方式可谓是多种多样,常见的推广方式有:亲朋好友推荐、利用企业内部资源、线下活动、微信智能周边、投票 […]...

  7. 模拟电子电路基础–半导体的基础知识

    模拟电子电路基础–半导体的基础知识 一、半导体基本知识 1.1 本征半导体    4价元素,纯净的 […]...

  8. dpi 、 dip 、分辨率、屏幕尺寸、px、density 关系以及换算

    一、基本概念 dip        : Density independent pixels ,设备无关像素。 […]...

展开目录

目录导航