【问题标题】:ScrapingHub Environment Variables Not LoadedScrapingHub 环境变量未加载
【发布时间】: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


【解决方案1】:

你可以在python中查看boto3库

示例代码

import boto3

# s3 region
sts_client = boto3.client('sts')
assumed_role_object = sts_client.assume_role(
    RoleArn="Roleproperty",
    RoleSessionName="SessionProperty"
)

#s3 cli credentials
credentials = assumed_role_object['Credentials']


aws_access_key_id=credentials['AccessKeyId']
aws_secret_access_key=credentials['SecretAccessKey']
aws_session_token=credentials['SessionToken']

参考

https://dluo.me/s3databoto3 https://boto3.amazonaws.com/v1/documentation/api/latest/guide/configuration.html

【讨论】:

  • 问题不是我无法连接到S3,而是应该由ScrapingHub设置的环境变量无处可寻
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-27
  • 2019-07-24
  • 2017-07-09
  • 2021-11-29
  • 2015-05-25
  • 2019-06-22
  • 1970-01-01
相关资源
最近更新 更多