scrapy的logging设置

本文详细介绍了在Scrapy框架中如何配置日志,包括设置日志级别、日志文件路径以及如何在代码中使用日志。从基本的日志设置到高级的自定义配置,帮助开发者更好地理解和使用Scrapy的日志功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

个人代码

spider代码(见else)

layNum = 0
        for lay in info:
            layNum += 1

            layoutID = self.newspaperID + publishDate + '{:0>2}'.format(layNum)
            
            itemLay = LayoutItem()
            itemLay['PaperDate'] = paperDate  # 发行日期
            itemLay['LayoutID'] = layoutID  # 版面ID
            itemLay['Edition'] = lay[1].split(':')[0].strip()  # 版次
            itemLay['PageName'] = lay[1].split(':')[1].strip()  # 版面名称
            itemLay['PDFUrl'] = lay[2].split('/')[-1]  # PDF文件名

            if layNum == 1:
                itemLay['IsCover'] = 1  # 是否首版
            else:
                itemLay['IsCover'] = 0
            itemLay['PDFUrl'] = lay[2].split('/')[-1]

            itemLay['PDFBytes'] = self.parsePdfImg(lay[2])
            # 下级url解析
            url_LA = 'http://epaper.routeryun.com/Page/index/pageid/{}.html#{}'.format(lay[0], lay[0])
            yield scrapy.Request(url=url_LA, callback=self.parseLay, meta={'layNum':layNum,'itemLay': itemLay},
                                 dont_filter=True)
        else:
            logging.info('#'*50)
            logging.info('版面数量'+str(layNum))

setting设置

# 设置日志
import datetime
import os
toDay = datetime.datetime.now()

filePath = r'..\..\log'
if not os.path.exists(filePath):
    os.makedirs(filePath)
logFilePath = r'..\..\log\log_{}_{}_{}.log'.format(toDay.year,toDay.month,toDay.day)

LOG_FILE = logFilePath
LOG_LEVEL = 'INFO'

 

日志设置1

log 信息级别从低到高依次是:notset、debug、info、warn、error、critical,日志只会显示比设置的日志等级高的级别,等级低的不会显示。

scrapy中:

    默认终端显示的是debug级别的log信息

    在setting里面设置 

    LOG_LEVEL = WARN #log日志的级别

    LOG_FILE = "./..."  # log日志的存储位置

在scrapy里面导入日志:

    import logging
    logger = logging.getLogger(__name__)  #实例化一个logger

    logger.warning(item)

--------------------- 本文来自 suelai 的优快云 博客 ,全文地址请点击:https://blog.youkuaiyun.com/suelai/article/details/79462160?utm_source=copy

 

日志设置2

Scrapy提供5层logging级别:

 

  1. CRITICAL - 严重错误

  2. ERROR - 一般错误

  3. WARNING - 警告信息

  4. INFO - 一般信息

  5. DEBUG - 调试信息

logging设置

通过在setting.py中进行以下设置可以被用来配置logging:

LOG_ENABLED 默认: True,启用logging

LOG_ENCODING 默认: ‘utf-8’,logging使用的编码

LOG_FILE 默认: None,在当前目录里创建logging输出文件的文件名

LOG_LEVEL 默认: ‘DEBUG’,log的最低级别

配置示例

# setting.py

from datetime import datetime

# 文件及路径,log目录需要先建好
today = datetime.now()
log_file_path = "log/scrapy_{}_{}_{}.log".format(today.year, today.month, today.day)

# 日志输出
LOG_LEVEL = 'DEBUG'
LOG_FILE = log_file_path

使用

logging.debug("baidu debug")

--------------------- 本文来自 彭世瑜 的优快云 博客 ,全文地址请点击:https://blog.youkuaiyun.com/mouday/article/details/80524182?utm_source=copy

 

 

 

日志设置3

目录文件

Hello/
scrapy.cfg
Hello/
    __init__.py
    items.py
    pipelines.py
    settings.py
    spiders/
        __init__.py

文件夹设置

文件及路径,log目录需要先建好
log建立在第一个Hello的下面
Linux平台:要给log文件夹相应的权限

代码的书写

在settings.py里进行添加以下代码

today = datetime.now()
log_file_path = "log/{}-{}-{} {}:{}:{}.log".format(today.year, today.month, today.day,today.hour,today.minute,today.second)
LOG_LEVEL= 'DEBUG'
LOG_FILE =log_file_path

--------------------- 本文来自 rightfight 的优快云 博客 ,全文地址请点击:https://blog.youkuaiyun.com/y_z_w123/article/details/81182054?utm_source=copy

 

 

日志设置4

参考来源:《Python网络数据采集》41页

参考来源:Scrapy文档

 

Scrapy生成的调试信息非常有用,但是通常太啰嗦,你可以在Scrapy项目中的setting.py中设置日志显示等级:

LOG_LEVEL = 'ERROR'

 

日志级别

Scrapy日志有五种等级,按照范围递增顺序排列如下:(注意《Python网络数据采集》书中这里有错)

  • CRITICAL - 严重错误
  • ERROR - 一般错误
  • WARNING - 警告信息
  • INFO - 一般信息
  • DEBUG - 调试信息

如果日志层级设置为ERROR,那么只有CRITICAL和ERROR日志会显示出来。

如果日志层级设置为DEBUG,那么所有信息都会显示出来,其它同理。

 

设置log级别

可以通过终端选项 -loglevel/-L 或 LOG_LEVEL 来设置log级别。

 

记录信息

下面给出如何使用WARING级别来记录信息

 
  1. from scrapy import log

  2. log.msg("This is a warning", level=log.WARING)

 

在Spider中添加log

在spider中添加log的推荐方式是使用Spider的 log() 方法。该方法会自动在调用 scrapy.log.start() 时赋值 spider 参数。

其它的参数则直接传递给 msg() 方法

 

scrapy.log模块

scrapy.log.start(logfile=None, loglevel=None, logstdout=None)

启动log功能。该方法必须在记录任何信息之前被调用。否则调用前的信息将会丢失。

参数:

  • logfile(str) - 用于保存log输出的文件路径。如果被忽略,LOG_FILE设置会被启用。如果两个参数都是None(默认值),log会被输出到标准错误流(stderr),一般都直接打印在终端命令行中。
  • loglevel - 记录的最低日志级别,可用的值在上面提到了
  • logstdout(boolean) - 如果设置为True,所有的应用的标准输出(包括标准错误)都将记录,例如,如果程序段中有 "print hello",那么执行到这里时,"hello"也会被记录到日志中。 
scrapy.log.msg(message,level=INFO,spider=None)

记录信息

参数:

  • message(str) - log信息
  • level - 该信息对应的级别
  • spider(spider 对象) - 记录信息的spider。当记录的信息和特定的spider有关联时,该参数必须使用

 

默认情况下日志显示在终端,但也可以通过下面的命令输出到一个独立的文件中:

$scrapy crawl spiderName -s LOG_FILE=spider.log (注意这里等号两边没有空格)

或者上面提到的 start() 中参数指定输出文件位置。


如果目录中没有spider.log 那么运行程序会创建一个新文件,然后把所有的日志都保存到里面。

如果已经存在,会在原文后面追加新的日志内容。

--------------------- 本文来自 hopyGreat 的优快云 博客 ,全文地址请点击:https://blog.youkuaiyun.com/hopygreat/article/details/78771500?utm_source=copy

<think>首先,用户的问题是:“我想在使用Scrapy时关闭日志输出的设置方法请问how todisable logoutput inScrapy”。用户想知道如何在Scrapy中关闭日志输出。根据系统指令,我需要:-使用中文回答。-结构清晰,逐步解决问题。-保证回答真实可靠。-在回答中引用的段落末尾添加引用标识。-生成相关问题。 -使用正确的LaTeX格式:行内数学表达式用$...$,独立公式用$$...$$并单独成段。现在,回顾提供的引用:-引用[1]:关于Scrapy命令行,如`scrapyfetch`,但未直接涉及日志设置。-引用[2]:关于Scrapy扩展,展示如何创建自定义扩展,连接到信号如`spider_opened`和`spider_closed`。-引用[3]:关于Scrapy框架,包括执行爬虫和在Pycharm中运行。 -引用[4]:关于Scrapy解析器使用(css和xpath)。 -引用[5]:关于Scrapy管道中处理二进制数据。这些引用中没有直接关于关闭日志的信息。我需要基于Scrapy的官方知识来回答。Scrapy允许通过设置日志级别来关闭日志输出。关键点: -Scrapy使用Pythonlogging模块。 -要关闭日志,可以设置日志级别为`CRITICAL`或更高,或者禁用日志输出。 -方法包括:1.在settings.py中设置日志级别。2.使用命令行选项。3.通过代码配置。 步骤: 1. **在settings.py中设置**:添加`LOG_ENABLED= False`或设置`LOG_LEVEL='ERROR'`。 2. **命令行选项**:使用`scrapycrawl <spider> --nolog`。3.**自定义配置**:在代码中覆盖设置。 从引用[1],有提到`--nolog`选项:`scrapy fetch--nolog http://www.example.com/...`。这直接相关。所以,我可以引用这个:-引用[1]提到:`scrapy fetch--nolog http://www.example.com/some/page.html`,这显示了使用`--nolog`选项来禁用日志。另外,在settings.py中,可以设置`LOG_ENABLED =False`来完全禁用日志。 回答结构:-先解释问题。-提供几种方法。-确保真实可靠:基于Scrapy文档。 -添加引用标识:在相关部分末尾添加[^1]。生成相关问题:-在结尾添加“相关问题”部分。LaTeX:用户问题中没有数学表达式,所以可能不需要。但如果有,确保格式正确。这里可能不需要。 完整回答:1.**介绍**:用户想在Scrapy中关闭日志输出。 2. **方法1:命令行选项**:使用`--nolog`选项,如`scrapycrawl myspider--nolog`。引用[1]中示例。3.**方法2:settings.py配置**:设置`LOG_ENABLED =False`或`LOG_LEVEL ='CRITICAL'`。 4. **方法3:自定义代码**:在爬虫中覆盖设置,或使用日志配置。 5. **总结**:推荐方法。 6. **相关问题**:生成几个相关问题。相关问题想法: 1.如何在Scrapy中自定义日志格式?2.Scrapy的日志级别有哪些? 3.如何在Scrapy中记录日志到文件? 4. Scrapy的其他性能优化设置? 确保回答清晰:-使用标题或列表。</think>### 在Scrapy中关闭日志输出的设置方法 在使用Scrapy框架时,关闭日志输出可以通过多种方式实现。日志输出通常用于调试和监控,但在生产环境或需要静默运行时,关闭日志可以提高效率并减少干扰。以下是几种可靠的方法,基于Scrapy的官方机制和最佳实践。我会逐步解释每种方法的操作步骤和注意事项,确保设置安全有效。 #### 方法1: 使用命令行选项(推荐用于临时关闭) 在运行Scrapy命令时,直接添加`--nolog`选项即可禁用日志输出。这是最简单快捷的方式,适用于单次执行场景。 - **操作步骤**: 1. 在终端或命令行中执行爬虫命令时,添加`--nolog`参数。 2. 示例命令:`scrapy crawl myspider --nolog`(其中`myspider`是您的爬虫名称)。 - **效果**: 日志输出完全被抑制,只显示必要的结果(如提取的数据)。 - **注意事项**: 此方法不会影响爬虫逻辑,仅针对当前命令生效。引用[1]中展示了类似用法(如`scrapy fetch --nolog http://www.example.com/`)[^1]。 #### 方法2: 修改settings.py文件(推荐用于永久关闭) 通过修改Scrapy项目的配置文件`settings.py`,可以全局禁用日志或调整日志级别。适用于需要长期关闭日志的场景。 - **操作步骤**: 1. 打开项目中的`settings.py`文件。 2. 添加或修改以下设置项: - 完全禁用日志:`LOG_ENABLED = False` - 或设置日志级别为最高(仅显示严重错误):`LOG_LEVEL = 'CRITICAL'` 3. 示例代码片段: ```python # settings.py LOG_ENABLED = False # 关闭所有日志输出 # 或 LOG_LEVEL = 'CRITICAL' # 仅输出CRITICAL级别日志 ``` - **效果**: 日志系统被全局禁用或仅保留关键错误信息。 - **注意事项**: 此设置会影响整个项目。如果需针对特定爬虫定制,可在爬虫类中覆盖设置(例如在`custom_settings`属性中定义)。 #### 方法3: 自定义扩展或中间件(高级方法) 如果您需要更精细的控制(如在爬虫启动时动态关闭日志),可以通过Scrapy的信号系统创建自定义扩展。这种方法灵活但较复杂。 - **操作步骤**: 1. 参考引用[2]中的扩展示例,创建一个处理信号的新类。 2. 在扩展中修改日志配置(例如,在`spider_opened`信号中禁用日志)。 3. 在`settings.py`中启用该扩展。 - **示例代码**: ```python # 新建文件extensions.py(与settings.py同级目录) import logging from scrapy import signals class DisableLogExtension: @classmethod def from_crawler(cls, crawler): ext = cls() crawler.signals.connect(ext.spider_opened, signal=signals.spider_opened) return ext def spider_opened(self, spider): logging.disable(logging.CRITICAL) # 禁用所有日志低于CRITICAL级别的输出 print("日志输出已关闭") # 可选:添加提示信息 ``` 在`settings.py`中配置: ```python EXTENSIONS = { 'your_project_name.extensions.DisableLogExtension': 100, } ``` - **效果**: 在爬虫启动时自动关闭日志,适用于需要条件触发的场景。 - **注意事项**: 此方法需谨慎使用,避免影响其他功能。引用[2]演示了信号连接的基本模式[^2]。 #### 总结和建议 - **推荐方法**: 对于大多数用户,**命令行添加`--nolog`**(方法1)是最简单的;如需永久关闭,**修改`settings.py`**(方法2)更高效。 - **验证方法**: 运行爬虫后,检查终端输出是否无日志信息(如`DEBUG`或`INFO`级别消息)。 - **潜在问题**: 关闭日志可能掩盖错误,建议在测试环境中先验证爬虫逻辑。Scrapy的日志系统基于Python `logging`模块,确保您的Python版本兼容(一般无问题)。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值