2012-05-06 11 views
12

Utilizzo Scrapy da circa 1 settimana e desidero archiviare le immagini su Amazon S3 e hanno affermato che supportano il caricamento di immagini su Amazon S3, ma non sono documentate. Quindi qualcuno sa come usare Amazon S3 con Scrapy?come conservare le immagini graffianti su Amazon S3?

Ecco la loro documentazione di Scrapy per media pipeline.

+0

Indicami la pagina in cui dicono che il supporto sta caricando su S3. Non riesco a trovarlo Non importa, l'ho visto ora. Usa python-boto per il caricamento su S3, è completamente documentato. – rantanplan

+0

Python-boto concordato è la strada da percorrere. –

+1

Grazie ragazzi, ma stavo chiedendo la causa E 'già implementato in scrapy. –

risposta

10

avete bisogno di 3 impostazioni:

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

questo è tutto, vale a dire. le immagini saranno memorizzate utilizzando stessa directory strutturata descritto http://readthedocs.org/docs/scrapy/en/latest/topics/images.html#file-system-storage, vale a dire:

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

Ho appena provato, e ho ricevuto questo errore "Nessun modulo chiamato boto.s3.connection" ..... ho appena provato easy_install boto e funziona bene ora :) Grazie –

+0

A partire da 8/8/12 v .14.4 - Ci sono alcuni problemi con l'implementazione dell'archivio di immagini s3 che possono portare il crawler a non rispondere a^c, richiedendo kill -9 alla fine. Una rapida occhiata al codice mi fa sospettare che ci sia un problema con il modo in cui il codice di memorizzazione delle immagini di s3 sta effettuando dei differimenti. – Ted

+0

@dangra Sto cercando di farlo funzionare ma non ci riesco (le immagini non vengono caricate su s3). Ho impostato: 'AWS_ACCESS_KEY_ID = "xxx" AWS_SECRET_ACCESS_KEY = "xxx" IMAGES_STORE = "http://s3-eu-west-1.amazonaws.com/[bucketname]"' Scrapy non lo fa sembrano avere errori. Ho anche installato boto. Cosa potrei mancare? – 2083

4

E 'stato un paio di anni dopo l'ultima risposta, e alcune cose sono cambiate (2015). Nick Verwymeren ha scritto un post sul blog con una versione aggiornata di come farlo. Il suo post sul blog è qui: https://www.nickv.codes/blog/scrapy-uploading-image-files-to-amazon-s3/

nel file 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' 

Per motivi di sicurezza suggerisco di creare un nuovo utente nell'interfaccia Amazon AWS e dare quell'utente sola lettura/Scrivi i privilegi sul tuo secchio.

Ora abbiamo bisogno di installare alcuni pacchetti che non vengono di default con Scrapy:

pip install pillow 
pip intall boto 

Pillow gestisce la manipolazione delle immagini e boto fornirà la libreria che si connette a S3.

Scrapy utilizza la chiave image_urls nell'elemento per cercare le immagini che deve essere scaricata. Questo dovrebbe essere un elenco di URL di immagini. Una volta scaricato Scrapy scrive i dettagli della posizione dell'immagine sul tasto immagini.

Non dimenticate di aggiungere questi al file items.py:

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

Ora non dimenticare di compilare in realtà la chiave image_urls durante il crawl. Una volta che la scansione del sito output finale sarà simile a questo per un determinato elemento:

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

Ora la testa su oltre a voi Amazon S3 secchio e dare un'occhiata. Le tue immagini e le tue miniature sono tutte lì!

Ancora una volta, un grande ringraziamento a Nick Verwymeren per il post sul blog che risponde esattamente a questa domanda!