【发布时间】:2019-10-31 15:31:14
【问题描述】:
我在 ScrapingHub 上部署了一堆蜘蛛。蜘蛛本身正在工作。我想根据蜘蛛是在本地运行还是在 ScrapingHub 上运行来更改提要输出(如果它在本地运行,则输出到临时文件夹,如果它在 ScrapingHub 上运行,则输出到 S3)。这个想法是我可以使用环境变量作为两者之间的切换。但是,尝试从我使用 ScrapingHub 接口设置的settings.py(在 Scrapy 项目中)打印环境变量会返回None。我在下面有一个代码 sn-p,它显示了我尝试做的事情。
奇怪的是,如果我将提要仅默认为 S3(不基于 env vars 进行切换),则 S3 上传工作。 S3 凭证也使用环境变量加载。尝试打印它们也会返回 None。然而,更改 AWS 密钥会导致上传失败,因此这些值会在某个时间点传递到 Scrapy,但可能不是在最初加载文件时。在项目级别或蜘蛛级别设置环境变量并没有改变任何东西。
我的问题是,在要部署在 ScrapingHub 上的 Scrapy 项目中使用环境变量的正确方法是什么?
# In settings.py
# Get the AWS credentials from the environment
AWS_ACCESS_KEY_ID = os.environ.get('AWS_ACCESS_KEY_ID')
AWS_SECRET_ACCESS_KEY = os.environ.get('AWS_SECRET_ACCESS_KEY')
# Print the credentials
print(AWS_ACCESS_KEY_ID) # Outputs None
print(AWS_SECRET_ACCESS_KEY) # Outputs None
FEED_URI = 's3://my-bucket/%(name)s/{}.json'.format(today.strftime('%Y-%m-%d'))
FEED_FORMAT = 'json'
编辑:
我发现support ticket on ScrapingHub 出现了相同的问题。问题似乎与覆盖 UI 界面设置的顺序有关。似乎没有任何关于此的文档。此外,scrapy:1.4 堆栈解决了 S3 问题。使用最新的scrapy:1.6 堆栈会导致问题出现。目前还没有一个令人满意的解决方案。
【问题讨论】:
-
我也遇到了同样的问题,你解决了吗?
标签: python amazon-s3 scrapy scrapinghub