【问题标题】:How to log scrapy spiders running from script如何记录从脚本运行的爬虫
【发布时间】:2015-11-20 11:44:01
【问题描述】:

大家好,我有多个从脚本运行的蜘蛛。脚本将每天安排一次。

  1. 我想分别记录信息和错误。日志文件名必须是 spider_infolog_[date]spider_errlog_[date] 我正在尝试以下代码,

蜘蛛 __init__ 文件

from twisted.python import log
import logging
LOG_FILE = 'logs/spider.log'
ERR_FILE = 'logs/spider_error.log'
logging.basicConfig(level=logging.INFO, filemode='w+', filename=LOG_FILE)
logging.basicConfig(level=logging.ERROR, filemode='w+', filename=ERR_FILE)
observer = log.PythonLoggingObserver()
observer.start()

在蜘蛛内:

import logging
.
.
.
logging.error(message)
  1. 如果蜘蛛代码中发生任何异常[就像我从 MysqlDB 获取启动 url,如果连接失败我需要关闭特定的蜘蛛而不是其他蜘蛛,因为我正在从脚本运行所有蜘蛛]

    引发 CloseSpider(消息)

上面的代码是否足以关闭特定的蜘蛛?

编辑@eLRuLL

import logging
from scrapy.utils.log import configure_logging
LOG_FILE = 'logs/spider.log'
ERR_FILE = 'logs/spider_error.log'
configure_logging()
logging.basicConfig(level=logging.INFO, filemode='w+', filename=LOG_FILE)
logging.basicConfig(level=logging.ERROR, filemode='w+', filename=ERR_FILE)

我已经将上面的代码放在了一个调度蜘蛛的脚本中。未创建不工作文件,但在控制台中我收到了日志消息。

编辑 2

我在 configure_logging() 中添加了 install_root_handler=False,它在 spider.log 文件中提供了所有控制台输出错误未区分。

configure_logging(install_root_handler=False)

【问题讨论】:

  • CloseSpider(从蜘蛛内部调用)应该足以关闭蜘蛛。
  • 谢谢@eLRuLL。你能看看我的第一个查询吗?
  • 我没试过,但也许你可以使用configure_logging,查看此文档:doc.scrapy.org/en/latest/topics/… 也许稍后你可以对脚本进行后处理以分离日志记录级别。
  • 已编辑帖子请查看@eLRuLL
  • 是的,就像我告诉过你的,我还没有尝试过,通过Settings 怎么样?您可以在此处指定日志记录详细信息,然后将其传递给脚本,请在此处查看doc.scrapy.org/en/latest/topics/…,特别是LOG_FILE

标签: python exception logging web-scraping scrapy


【解决方案1】:

你可以这样做:

from scrapy import cmdline

cmdline.execute("scrapy crawl myspider --logfile mylog.log".split())

将该脚本放在您放置scrapy.cfg的路径中

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-28
    • 1970-01-01
    • 1970-01-01
    • 2021-05-05
    • 1970-01-01
    • 2014-02-28
    • 1970-01-01
    • 2015-10-16
    相关资源
    最近更新 更多