【问题标题】:how to store scrapy images on Amazon S3?如何在 Amazon S3 上存储scrapy 图像?
【发布时间】:2012-05-06 16:42:36
【问题描述】:

我已经使用 Scrapy 大约 1 周了,想将图像存储到亚马逊 S3,他们提到他们支持将图像上传到亚马逊 S3,但没有记录。那么有人知道如何将 Amazon S3 与 Scrapy 一起使用吗?

这是他们针对media pipeline 的 Scrapy 文档。

【问题讨论】:

  • 将我指向他们说支持上传到 S3 的页面。我找不到它。没关系,我现在看到了。使用 python-boto 上传到 S3,它有完整的文档。
  • 同意 python-boto 是要走的路。
  • 谢谢大家,但我在问原因它已经在scrapy中实现了。
  • 也许你可以试试我的解决方案:stackoverflow.com/a/25904379/1229778

标签: python amazon-s3 scrapy


【解决方案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

【讨论】:

  • 我刚试了一下,得到了这个错误“没有名为 boto.s3.connection 的模块”.....刚刚试了 easy_install boto,现在可以正常工作了 :) 谢谢
  • 截至 2012 年 8 月 8 日 v .14.4 - s3 图像存储实现存在一些问题,可能导致您的爬虫挂起对 ^c 无响应,需要 kill -9 结束。快速浏览代码让我怀疑 s3 图像存储代码执行延迟的方式存在问题。
  • @dangra 我试图让它工作但不能(图像未上传到 s3)。我已经设置:AWS_ACCESS_KEY_ID = "xxx" AWS_SECRET_ACCESS_KEY = "xxx" IMAGES_STORE = "http://s3-eu-west-1.amazonaws.com/[bucketname]" Scrapy 似乎没有出现任何错误。我也安装了boto。我可能会错过什么?
【解决方案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 botocore

Pillow 处理图像操作,boto 将提供连接到 S3 的库。

Scrapy 使用您项目中的 image_urls 键来查找它应该下载的图像。这应该是图像 url 的列表。下载后,Scrapy 会将图像位置的详细信息写入 images 键。

不要忘记将这些添加到您的 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'}],

现在前往您的亚马逊 S3 存储桶并看看。你的图片和缩略图都在那里!

再次感谢 Nick Verwymeren 的博文准确回答了这个问题!

【讨论】:

  • 错字(缺少s):pip install boto
  • 截至 2018 年和 Scrapy 1.5.0,需要 botocore 而不是 boto,否则图像管道将被禁用,并显示警告消息 botocore is missing。检查@Duc Chi的答案
【解决方案3】:

@2083 我和你遇到了同样的问题。没有错误,并且已经安装了 boto。 你可以在这里找到答案:https://doc.scrapy.org/en/latest/topics/feed-exports.html#topics-feed-storage-s3 “Scrapy 仅在 Python 2 上支持 boto” 我认为您像我一样使用 Python 3。然后,我安装了 botocore。它奏效了!

【讨论】:

    猜你喜欢
    • 2015-04-17
    • 2011-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-02
    • 1970-01-01
    • 2011-01-04
    • 2021-11-14
    相关资源
    最近更新 更多