ScrapingHub环境变量未加载

时间:2019-06-18 03:41:56

标签: python amazon-s3 scrapy scrapinghub

我正在ScrapingHub上部署一堆蜘蛛。蜘蛛本身正在工作。我想根据蜘蛛是在本地运行还是在ScrapingHub上更改供稿输出(如果它在本地运行,则输出到一个临时文件夹,如果它在ScrapingHub上运行,则输出到S3)。我的想法是,我可以使用环境变量作为两者之间的切换。但是,尝试从我使用ScrapingHub接口设置的settings.py(在Scrapy项目中)打印环境变量会返回None。我下面有一个代码片段,显示了我尝试做的事情。

奇怪的是,如果我仅将提要默认为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堆栈会导致出现此问题。仍然没有令人满意的解决方案。

1 个答案:

答案 0 :(得分:0)

您可以在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