如何全局配置Scrapy以屏蔽爬虫抓取的Item输出,同时保留其他日志及自定义打印内容
如何全局配置Scrapy以屏蔽爬虫抓取的Item输出,同时保留其他日志及自定义打印内容
我来帮你解决这个问题,你的需求是全局屏蔽Scrapy抓取到的Item字典输出,但保留其他系统日志和自定义的print内容,对吧?下面给你一步步讲清楚正确的实现方式:
先明确目标日志来源
你看到的{'price': 100, 'newprice': 90}这类Item输出,其实是scrapy.core.scraper组件的DEBUG级别日志。我们不需要禁用整个组件的日志(那样会丢失其他有用信息,比如抓取异常提示),只需要把这个组件的日志级别调高,就能精准屏蔽掉Item的DEBUG输出。
全局配置的正确方式(一次配置,所有爬虫生效)
你的项目根目录下的settings.py(和scrapy.cfg同目录的那个文件)是全局配置的核心入口,所有爬虫启动时都会自动加载这里的配置。只需要在这个文件里添加以下代码:
import logging from scrapy.utils.log import configure_logging # 初始化Scrapy日志系统,不使用默认的根处理器,方便自定义配置 configure_logging(install_root_handler=False) # 设置全局日志的基础格式和级别(可根据自己需求调整格式) logging.basicConfig( level=logging.INFO, format="%(asctime)s [%(name)s] %(levelname)s: %(message)s", handlers=[logging.StreamHandler()] # 输出到终端,也可以添加FileHandler把日志保存到文件 ) # 关键配置:把scrapy.core.scraper的日志级别设为INFO,屏蔽它的DEBUG日志(也就是Item输出) logging.getLogger("scrapy.core.scraper").setLevel(logging.INFO)
解释你之前代码的问题
你之前写的代码存在几个核心问题:
- 缺少必要的导入:需要导入
logging、from scrapy.utils.project import get_project_settings、from scrapy.crawler import CrawlerProcess才不会报错 - 这种写法是针对单个爬虫的启动脚本,没法覆盖你几百个爬虫的全局需求
- 直接禁用整个
scrapy.core.scraper的日志会丢失该组件的其他有用日志(比如抓取失败的提示),得不偿失
关于自定义print内容的说明
你在爬虫里写的print('hi')这类语句,是直接输出到标准输出的,不受Scrapy日志系统的控制,所以会正常显示,完全不需要额外配置。
验证效果
当你再次运行scrapy crawl test -O test.json时,就不会看到那些Item字典的输出了,但其他系统日志(比如爬虫启动/关闭提示、Feed存储状态、Selenium相关日志)都会保留,你的自定义print内容也会正常显示。
备注:内容来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

