如果我使用本地文件存储下载的图像,我的蜘蛛可以正常工作。
但是当尝试上传到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'
答案 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