【问题标题】:How can I create log file with spider name in settings.py dynamically?如何在 settings.py 中动态创建带有蜘蛛名称的日志文件?
【发布时间】:2020-12-29 11:37:31
【问题描述】:

我有 20 种不同的蜘蛛,它们按计划工作。一天结束时,当我检查日志文件时,我收到了超过 15.000 行日志。

settings.py 中我最近的日志设置

from datetime import datetime
now = datetime.today()
now_time = now.strftime("%d.%m.%y")

LOG_FORMAT = '%(levelname)s: %(message)s'
LOG_FILE = 'scrapy-log-'+now_time+'.txt'

但我想准备日志文件取决于蜘蛛名称

我对 settings.py 的期望

from datetime import datetime
now = datetime.today()
now_time = now.strftime("%d.%m.%y")

LOG_FORMAT = '%(levelname)s: %(message)s'
LOG_FILE = spider_name+now_time+'.txt'

但是我不知道如何在爬取所有蜘蛛的时候动态获取spider_name。

所以问题是如何在 settings.py 中动态使用 spider_name?

【问题讨论】:

    标签: python web-scraping scrapy scrapy-settings


    【解决方案1】:

    您可以在实例化蜘蛛时尝试覆盖设置。像这样的:

    class YourSpider(CrawlSpider):
    
        start_urls = ['http://website.com']
        allowed_domains = ['www.website.com']
    
        name = 'spider_name'
        custom_settings = {
            'LOG_FILE' = name+now_time+'.txt',
        }
    

    请参阅文档https://docs.scrapy.org/en/latest/topics/settings.html 中的“2. 每个蜘蛛的设置”部分

    【讨论】:

    • 现在时间不能动态工作我尝试在init中添加它也不起作用我尝试@property函数它也不起作用。
    • 它应该和 spider_name 一样工作,只要你在蜘蛛模块中导入你的 datetime 模块并在你的蜘蛛类中创建变量 now_time
    • 我明白了,但是当我运行脚本时,课程从今天的日期开始,并且保持不变
    • 无论如何,你的方式很有帮助。我将为此提出另一个问题。
    • 好的,我明白为什么了。这是因为尖顶只被实例化一次,所以只保存了该实例化的时间。您可以使用 parse_item 或 pipeliens 中的日志记录功能来获取当前时间,也可以使用当前的 spider_name 写入日志。它在文档docs.scrapy.org/en/latest/topics/logging.html 的“从蜘蛛记录”部分中进行了解释,希望对您有所帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-15
    • 2015-08-27
    • 2014-09-18
    • 2012-09-24
    • 1970-01-01
    • 2011-02-20
    • 1970-01-01
    相关资源
    最近更新 更多