2012-05-06 20 views
12

He estado usando Scrapy por alrededor de 1 semana y quiero almacenar las imágenes en amazon S3, y mencionaron que admiten la carga de imágenes en Amazon S3 pero no está documentado. Entonces, ¿alguien sabe cómo usar Amazon S3 con Scrapy?cómo almacenar imágenes de scrapy en Amazon S3?

Aquí está su documentación de Scrapy para media pipeline.

+0

Dirígeme a la página que dicen que es compatible con la carga de S3. No puedo encontrarlo No importa, lo vi ahora. Utilice python-boto para cargar en S3, está completamente documentado. – rantanplan

+0

El pitón-boto acordado es el camino a seguir. –

+1

Gracias chicos, pero estaba preguntando porque ya está implementado en scrapy. –

Respuesta

10

Se necesitan 3 niveles:

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

eso es todo, es decir. las imágenes se almacenan utilizando mismo directorio estructurado descrito en http://readthedocs.org/docs/scrapy/en/latest/topics/images.html#file-system-storage, es decir:

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

Acabo de probarlo, y obtuve este error "Ningún módulo llamado boto.s3.connection" ..... intenté con el boto easy_install y funciona bien ahora :) Gracias –

+0

A partir del 8/8/12 v .14.4: hay algunos problemas con la implementación de la tienda de imágenes s3 que pueden hacer que su rastreador no responda a^c, lo que requiere que kill -9 finalice. Una mirada rápida a través del código me hace sospechar que hay un problema con la forma en que el código de almacenamiento de imágenes s3 está haciendo aplazamientos. – Ted

+0

@dangra Estoy tratando de hacer que esto funcione pero no puedo (las imágenes no se cargan en s3). He puesto: 'AWS_ACCESS_KEY_ID = "xxx" AWS_SECRET_ACCESS_KEY = "xxx" IMAGES_STORE = "http://s3-eu-west-1.amazonaws.com/[bucketname]"' Scrapy no lo hace parece tener cualquier error. También instalé Boto. ¿Qué podría estar perdiendo? – 2083

4

Ha sido un par de años desde la última respuesta, y algunas cosas han cambiado (2015). Nick Verwymeren escribió una publicación en el blog que detalla una versión actualizada de cómo hacer esto. Su entrada en el blog está aquí: https://www.nickv.codes/blog/scrapy-uploading-image-files-to-amazon-s3/

en su archivo 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' 

En aras de la seguridad Sugiero crear un nuevo usuario en la interfaz de Amazon AWS y dar a ese usuario sólo lectura/escribe privilegios en tu cubo.

Ahora tenemos que instalar algunos paquetes que no vienen por defecto con Scrapy:

pip install pillow 
pip intall boto 

almohada se encarga de la manipulación de imágenes y boto proporcionará la biblioteca que se conecta a S3.

Scrapy utiliza la tecla image_urls en el elemento para buscar las imágenes que debería descargar. Esta debería ser una lista de urls de imágenes. Una vez descargado, Scrapy escribe los detalles de la ubicación de la imagen en la tecla de imágenes.

No se olvide de añadir estos a su archivo items.py:

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

Ahora no se olvide de poblarlo la tecla image_urls durante su rastreo. Una vez que rastrear su salida final sitio se verá algo como esto para un determinado artículo:

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

Ahora la cabeza a que Amazon S3 cubo y echar un vistazo. ¡Tus imágenes y miniaturas están todas allí!

De nuevo, muchas gracias a Nick Verwymeren por la publicación del blog que responde esta pregunta con exactitud.