无法从Scrapy上传图像到S3

时间:2018-02-24 14:42:35

标签: python amazon-web-services amazon-s3 scrapy

如果我使用本地文件存储下载的图像,我的蜘蛛可以正常工作。

但是当尝试上传到Amazon S3时,它会显示此错误

<a href="mailto:example@example.com?Subject=test&body=test \n test \n test \n"

我有以下AWS的设置

    2018-02-24 14:37:06 [scrapy.core.scraper] ERROR: Error processing {'category': {'level_1': {'name': u'Electronics', 'url': u'electronics'},
                  'level_2': {'name': u'Accessories',
                              'url': u'electronics-computers-office-accessories'}},
     'image_urls': [u'http://www.some.com/media/catalog/product/cache/1/small_image/165x/9df78eab33525d08d6e5fb8d27136e95/r/s/rs500.jpg'],
},
     'name': u'Gift Card Rupees 500',
}
    Traceback (most recent call last):
      File "/usr/local/lib/python2.7/site-packages/twisted/internet/defer.py", line 653, in _runCallbacks
        current.result = callback(current.result, *args, **kw)
      File "/scraper/scraper/pipelines.py", line 32, in process_item
        if not item['images']:
      File "/usr/local/lib/python2.7/site-packages/scrapy/item.py", line 59, in __getitem__
        return self._values[key]
    KeyError: 'images'

我有一个全新的s3帐户所有默认设置。

这是我检查图像的管道,它引发了上述错误

IMAGES_STORE = 's3://myproject-products-images/'
IMAGES_EXPIRES = 180
AWS_ACCESS_KEY_ID = 'sdfasfasfsaf'
AWS_SECRET_ACCESS_KEY = 'adfasfasfasf'

1 个答案:

答案 0 :(得分:1)

为了填充images字段,该项必须通过图像管道。

这意味着必须在检查之前使用图像管道 要实现此目的,请在设置中为图像管道提供更高优先级(低阶):

ITEM_PIPELINES = {
    'scrapy.pipelines.images.ImagesPipeline': 100,
    'scraper.pipelines.ImageCheckPipeline': 200,
}

另外,为避免KeyError,您必须像这样重写代码(检查密钥的存在,而不是其值):

if 'images' not in item:
    spider.logger.error('Images not found', {'item': item})
    raise DropItem