python - Scrapy - 日志级别。在 AWS Lambda 与本地上运行的不同行为
问题描述
我从脚本https://doc.scrapy.org/en/latest/topics/practices.html#run-scrapy-from-a-script运行 Scrapy以从 AWS Lambda 启动脚本。我用 SAM 编译项目,一切都是正确的。
但是现在,我遇到了 LOG_LEVEL 参数的问题。
def handler(event, context):
settings = {
'USER_AGENT': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.85 Safari/537.36',
'LOG_ENABLED': True,
'LOG_LEVEL': 'ERROR'
}
process = CrawlerProcess(settings=settings)
process.crawl(Spider)
process.start()
在本地执行此代码时,一切正常,仅收到 LOG_LEVEL: ERROR,但在 AWS Lambda 中执行此代码时,我收到 LOG_LEVEL: DEBUG,我不知道如何解决。
解决方案
根据Scrapy 问题 #3587中 OP 的输入,事实证明 AWS Lambda 在根记录器上安装了自己的处理程序,因此您需要在使用 Scrapy 之前删除这些处理程序:
from logging import getLogger
getLogger().handlers = []
def handler(event, context): # AWS Lambda entry point
pass # Your code to call Scrapy.
推荐阅读
- printing - 如何使用 ZPL II 打印像 E_{n} 这样的下标?
- visual-studio-code - 为什么在超级终端中工作的永久别名在 vs-code bash 终端中不起作用?
- java - 如何使 systemprintln 语句仅打印 arraylist 值而不重复文本
- r - 使用 R 对数据框执行敏感性分析
- django - filter() 会抛出异常吗?
- javascript - 创建新的 iframe 并同步加载内容
- jquery - 如何使用jQuery将thead、tr、th和td动态添加到表中?
- php - 如何添加 - 中间字符串
- azure - 有没有办法获取任务中使用的 SubscriptionID:“Azure 资源组部署”
- c# - BotDetect验证码未加载