2012-05-06 27 views
12

Tôi đã sử dụng Scrapy khoảng 1 tuần và muốn lưu trữ hình ảnh vào amazon S3 và họ đã đề cập rằng chúng hỗ trợ tải hình ảnh lên amazon S3 nhưng không được ghi lại. Vì vậy, không ai biết làm thế nào để sử dụng Amazon S3 với Scrapy?làm thế nào để lưu trữ hình ảnh cồng kềnh trên Amazon S3?

Đây là tài liệu Scrapy của họ cho media pipeline.

+0

Chỉ cho tôi trang mà họ cho biết hỗ trợ tải lên S3. Tôi không thể tìm thấy nó. Đừng bận tâm, tôi đã thấy nó ngay bây giờ. Sử dụng python-boto để tải lên S3, nó hoàn toàn được ghi lại. – rantanplan

+0

Đồng ý python-boto là con đường để đi. –

+1

Cảm ơn các bạn, nhưng tôi đã hỏi nguyên nhân Nó đã được thực hiện trong cặn bã. –

Trả lời

10

Bạn cần 3 thiết lập:

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

đó là tất cả, tức là. hình ảnh sẽ được lưu trữ sử dụng cùng một thư mục có cấu trúc được mô tả tại http://readthedocs.org/docs/scrapy/en/latest/topics/images.html#file-system-storage, ví dụ:

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

Tôi vừa thử nó, và có lỗi này "Không có mô-đun tên boto.s3.connection" ..... vừa thử easy_install boto và nó hoạt động tốt ngay bây giờ :) Cảm ơn –

+0

Kể từ 8/8/12 v .14.4 - có một số vấn đề với việc triển khai cửa hàng hình ảnh s3 có thể khiến trình thu thập thông tin của bạn không phản hồi^c, yêu cầu phải giết -9 để kết thúc. Một cái nhìn nhanh chóng thông qua mã làm cho tôi nghi ngờ rằng có một vấn đề với cách mã lưu trữ hình ảnh s3 đang làm trì hoãn. – Ted

+0

@dangra Tôi đang cố gắng làm việc này nhưng không thể (hình ảnh không được tải lên s3). Tôi đã thiết lập: 'AWS_ACCESS_KEY_ID = "xxx" AWS_SECRET_ACCESS_KEY = "xxx" IMAGES_STORE = "http://s3-eu-west-1.amazonaws.com/[bucketname]" ' Scrapy không dường như nhận được bất kỳ lỗi nào. Tôi cũng cài đặt boto. Tôi có thể thiếu gì? – 2083

4

Nó đã được một vài năm kể từ khi câu trả lời cuối cùng, và một số thứ đã thay đổi (2015). Nick Verwymeren đã viết một bài đăng trên blog chi tiết một phiên bản cập nhật về cách thực hiện việc này. bài viết trên blog của ông là ở đây: https://www.nickv.codes/blog/scrapy-uploading-image-files-to-amazon-s3/

trong tập tin settings.py của bạn:

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' 

Vì lợi ích của an ninh tôi khuyên bạn nên tạo một người dùng mới trong giao diện của Amazon AWS và cung cấp cho người dùng mà chỉ đọc/viết đặc quyền cho nhóm của bạn.

Bây giờ chúng ta cần phải cài đặt một vài gói mà không đi theo mặc định với Scrapy:

pip install pillow 
pip intall boto 

Gối xử lý các thao tác hình ảnh và boto sẽ cung cấp các thư viện kết nối với S3.

Phế liệu sử dụng khóa image_urls trong mục của bạn để tìm kiếm hình ảnh cần tải xuống. Đây phải là danh sách các url hình ảnh. Sau khi tải xuống Scrapy ghi chi tiết của hình ảnh locaiton vào phím hình ảnh.

Đừng quên thêm chúng vào tập tin items.py của bạn:

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

Bây giờ đừng quên để thực sự cư phím image_urls trong crawl của bạn. Khi bạn thu thập dữ liệu đầu ra cuối cùng của trang web của mình sẽ trông giống như thế này cho một mục nhất định:

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

Bây giờ, hãy truy cập vào thùng chứa Amazon S3 và xem. Hình ảnh và hình thu nhỏ của bạn đều ở đó!

Một lần nữa, xin cảm ơn Nick Verwymeren vì bài đăng trên blog trả lời chính xác câu hỏi này!

1

@ 2083 Tôi đã gặp vấn đề tương tự với bạn. Không có lỗi và boto đã được cài đặt. Bạn có thể tìm thấy câu trả lời ở đây: https://doc.scrapy.org/en/latest/topics/feed-exports.html#topics-feed-storage-s3 "Hỗ trợ bừa bãi chỉ trên Python 2" Tôi nghĩ bạn đang sử dụng Python 3 như tôi. Sau đó, tôi đã cài đặt botocore. Va no đa hoạt động!

Các vấn đề liên quan