Переменные среды ScrapingHub не загружены - PullRequest
0 голосов
/ 18 июня 2019

Я развертываю группу пауков на ScrapingHub. Сам паук работает. Я хотел бы изменить вывод канала в зависимости от того, работает ли паук локально или на ScrapingHub (если он работает локально, то выводится во временную папку, если он работает на выходе ScrapingHub на S3). Идея в том, что я могу использовать переменную окружения в качестве переключателя между ними. Однако, попытка напечатать переменные окружения из settings.py (в проекте Scrapy), которые я установил с использованием интерфейса ScrapingHub, возвращает None. Ниже приведен фрагмент кода, который показывает, что я пытался сделать.

Как ни странно, если я по умолчанию кормлю только S3 (без переключения на основе env vars), загрузка S3 работает. Учетные данные S3 также загружаются с использованием переменных среды. Попытка распечатать их также возвращает None. Однако изменение ключей AWS приводит к сбою загрузки, поэтому значения попадают в Scrapy в какой-то момент времени, возможно, не при первоначальной загрузке файла. Установка переменных среды на уровне проекта или на уровне паука ничего не изменила.

Мой вопрос: как правильно использовать переменные среды в проекте Scrapy, который должен быть развернут на ScrapingHub?

# 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'

EDIT:

Я нашел билет поддержки на ScrapingHub , где была представлена ​​идентичная проблема. Кажется, проблема в том порядке, в котором настройки интерфейса UI перезаписываются. Там, кажется, нет никакой документации по этому поводу. Кроме того, проблема S3 исчезает со стеком scrapy:1.4. Использование последнего стека scrapy:1.6 приводит к появлению проблемы. До сих пор нет удовлетворительного решения.

1 Ответ

0 голосов
/ 18 июня 2019

Вы можете проверить библиотеку boto3 в python

Пример кода

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

...