Python 如何在AmazonS3上存储碎片图像?
我已经使用Scrapy大约一周了,我想把图片存储到AmazonS3,他们提到他们支持图片上传到AmazonS3,但是没有文档记录。那么,有人知道如何将AmazonS3与Scrapy一起使用吗 这是他们的详细文档。您需要3种设置:Python 如何在AmazonS3上存储碎片图像?,python,amazon-s3,scrapy,Python,Amazon S3,Scrapy,我已经使用Scrapy大约一周了,我想把图片存储到AmazonS3,他们提到他们支持图片上传到AmazonS3,但是没有文档记录。那么,有人知道如何将AmazonS3与Scrapy一起使用吗 这是他们的详细文档。您需要3种设置: AWS_ACCESS_KEY_ID = "xxxxxx" AWS_SECRET_ACCESS_KEY = "xxxxxx" IMAGES_STORE = "s3://bucketname/base-key-dir-if-any/" 仅此而已,即图像将使用在中描述的相同
AWS_ACCESS_KEY_ID = "xxxxxx"
AWS_SECRET_ACCESS_KEY = "xxxxxx"
IMAGES_STORE = "s3://bucketname/base-key-dir-if-any/"
仅此而已,即图像将使用在中描述的相同目录进行存储,即:
自上一次回答以来已经过去了几年,有些事情已经发生了变化(2015年)。Nick Verwymeren写了一篇博客文章,详细介绍了如何做到这一点的更新版本。他的博文如下: 在您的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'
为了安全起见,我建议在AmazonAWS界面中创建一个新用户,并向该用户授予bucket的只读/写权限
现在,我们需要安装一些不是Scrapy默认附带的软件包:
pip install pillow
pip intall botocore
Pillow处理图像处理,boto将提供连接到S3的库
Scrapy使用项目中的image_url键查找它应该下载的图像。这应该是图像URL的列表。下载后,Scrapy会将图像位置的详细信息写入图像键
不要忘记将以下内容添加到items.py文件中:
class MyItem(scrapy.Item):
image_urls = scrapy.Field()
images = scrapy.Field()
现在不要忘记在爬网期间实际填充image_url键。一旦您对站点进行爬网,给定项目的最终输出将如下所示:
'image_urls': [u'http://example.com/images/tshirt.jpg'],
'images': [{ 'checksum': '264d3bbdffd4ab3dcb8f234c51329da8',
'path': 'full/069f409fd4cdb02248d726a625fecd8299e6055e.jpg',
'url': 'http://example.com/images/tshirt.jpg'}],
现在向你走去,看一看。你的图片和缩略图都在那里
再次感谢Nick Verwymeren的博客文章,它准确地回答了这个问题 @2083
我和你遇到过同样的问题。没有错误,并且已经安装了boto。
你可以在这里找到答案:
“Scrapy仅在Python 2上支持boto”
我想你和我一样在使用Python 3。然后,我安装了botocore。成功了 让我看看他们说支持上传到S3的页面。我找不到它。没关系,我现在看到了。使用python boto上传到S3,这是完全有文档记录的。同意python boto是一种方式。谢谢各位,但我是在问,因为它已经在scrapy中实现了。也许你可以试试我的解决方案:我刚刚尝试过,但出现了错误“没有名为boto.S3.connection的模块”。。。。。刚刚尝试了easy_install boto,现在可以正常工作了:)感谢8/8/12 v.14.4的版本——s3映像存储实现存在一些问题,可能会导致爬虫挂起对^c没有响应,需要kill-9才能结束。快速浏览代码使我怀疑s3映像存储代码执行延迟的方式存在问题。@dangra我正在尝试使其正常工作,但无法(映像未上载到s3)。我已经设置:
AWS\u ACCESS\u KEY\u ID=“xxx”AWS\u SECRET\u ACCESS\u KEY=“xxx”IMAGES\u STORE=”http://s3-eu-west-1.amazonaws.com/[bucketname]“
Scrapy似乎没有任何错误。我还安装了boto。我可能会缺少什么?输入错误(缺少s
):pip安装boto
从2018年和Scrapy 1.5.0开始,需要botocore
,而不是boto
,否则图像管道将被禁用,并显示一条警告消息,说明botocore缺少
。通过@Duc Chi
'image_urls': [u'http://example.com/images/tshirt.jpg'],
'images': [{ 'checksum': '264d3bbdffd4ab3dcb8f234c51329da8',
'path': 'full/069f409fd4cdb02248d726a625fecd8299e6055e.jpg',
'url': 'http://example.com/images/tshirt.jpg'}],