Подтвердить что ты не робот

Как хранить снимки на Amazon S3?

Я использую Scrapy около 1 недели и хочу сохранить изображения на амазонке S3, и они упомянули, что поддерживают загрузку изображений на амазонку S3, но не задокументированы. Так кто-нибудь знает, как использовать Amazon S3 со Scrapy?

Вот их документация по Scrapy для медиаконвейер.

4b9b3361

Ответ 1

Вам нужны 3 настройки:

AWS_ACCESS_KEY_ID = "xxxxxx"
AWS_SECRET_ACCESS_KEY = "xxxxxx"
IMAGES_STORE = "s3://bucketname/base-key-dir-if-any/"

что все, т.е. изображения будут храниться в том же каталоге, который описан в http://readthedocs.org/docs/scrapy/en/latest/topics/images.html#file-system-storage, то есть:

s3://bucketname/base-key-dir-if-any/full/3afec3b4765f8f0a07b78f98c07b83f013567a0a.jpg

Ответ 2

Прошло уже пару лет с момента последнего ответа, и некоторые вещи изменились (2015). Nick Verwymeren написал сообщение в блоге с подробной версией того, как это сделать. Его сообщение в блоге находится здесь: https://www.nickv.codes/blog/scrapy-uploading-image-files-to-amazon-s3/

в файле settings.py:

ITEM_PIPELINES = {
    'scrapy.contrib.pipeline.images.ImagesPipeline': 1
}

# This is going to be the amazon s3 bucket. 
# You need to use the below format so Scrapy 
# can parse it. !!Important don't forget to add 
# the trailing slash.
IMAGES_STORE = 's3://my-bucket-name/'

# The amount of days until we re-download the image
IMAGES_EXPIRES = 180     

# You can add as many of these as you want
IMAGES_THUMBS = {
    'small': (50, 50), 
    'big': (300, 300)
}

AWS_ACCESS_KEY_ID = 'your-access-key'
AWS_SECRET_ACCESS_KEY= 'your-secret-access-key'

В целях безопасности я предлагаю создать нового пользователя в интерфейсе Amazon AWS и предоставить этим пользователям только права на чтение/запись в вашем ковше.

Теперь нам нужно установить несколько пакетов, которые по умолчанию не были установлены с помощью Scrapy:

pip install pillow
pip intall boto

Подушка обрабатывает манипуляции с изображениями, а boto предоставит библиотеку, которая подключается к S3.

Scrapy использует ключ image_urls в вашем элементе для поиска изображений, которые он должен скачать. Это должен быть список URL-адресов изображений. После загрузки Scrapy записывает детали изображения в файл изображения.

Не забудьте добавить их в файл items.py:

class MyItem(scrapy.Item):
    image_urls = scrapy.Field()
    images = scrapy.Field()

Теперь не забудьте заполнить ключ image_urls во время сканирования. После того, как вы сканируете свой сайт, окончательный вывод будет выглядеть примерно так для данного элемента:

'image_urls': [u'http://example.com/images/tshirt.jpg'],
'images': [{ 'checksum': '264d3bbdffd4ab3dcb8f234c51329da8',
         'path': 'full/069f409fd4cdb02248d726a625fecd8299e6055e.jpg',
         'url': 'http://example.com/images/tshirt.jpg'}],

Теперь переходите к вам в ведро Amazon S3 и посмотрите. Ваши изображения и миниатюры - это все!

Опять же, большое спасибо Нику Вервимерен за сообщение в блоге, которое точно отвечает на этот вопрос!

Ответ 3

@2083 Я встретил с тобой такую ​​же проблему. Ошибка и boto уже установлены. Вы можете найти ответ здесь: https://doc.scrapy.org/en/latest/topics/feed-exports.html#topics-feed-storage-s3 "Scrapy поддерживает boto только на Python 2" Я думаю, вы используете Python 3, как я. Затем я установил ботокоры. И это сработало!