首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >刮擦图像下载如何使用自定义文件名

刮擦图像下载如何使用自定义文件名
EN

Stack Overflow用户
提问于 2011-05-31 21:57:05
回答 6查看 14.2K关注 0票数 14

对于我的刮痕项目,我目前正在使用ImagesPipeline。下载的图像是作为文件名的URL的使用SHA1哈希存储

如何使用自己的自定义文件名来存储文件?

如果我的自定义文件名需要包含来自同一项的另一个刮掉的字段,怎么办?例如,使用item['desc']item['image_url']图像的文件名。如果我正确理解的话,这将涉及从Image管道访问其他项目字段。

任何帮助都将不胜感激。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-06-01 04:11:47

这就是我在Scrapy 0.10中解决问题的方法。检查方法persist_image of FSImagesStoreChangeableDirectory。下载图像的文件名是关键。

代码语言:javascript
运行
复制
class FSImagesStoreChangeableDirectory(FSImagesStore):

    def persist_image(self, key, image, buf, info,append_path):

        absolute_path = self._get_filesystem_path(append_path+'/'+key)
        self._mkdir(os.path.dirname(absolute_path), info)
        image.save(absolute_path)

class ProjectPipeline(ImagesPipeline):

    def __init__(self):
        super(ImagesPipeline, self).__init__()
        store_uri = settings.IMAGES_STORE
        if not store_uri:
            raise NotConfigured
        self.store = FSImagesStoreChangeableDirectory(store_uri)
票数 8
EN

Stack Overflow用户

发布于 2014-03-08 01:48:16

这只是对scrapy 0.24 (编辑)的答案的实现,其中image_key()是不推荐的

代码语言:javascript
运行
复制
class MyImagesPipeline(ImagesPipeline):

    #Name download version
    def file_path(self, request, response=None, info=None):
        #item=request.meta['item'] # Like this you can use all from item, not just url.
        image_guid = request.url.split('/')[-1]
        return 'full/%s' % (image_guid)

    #Name thumbnail version
    def thumb_path(self, request, thumb_id, response=None, info=None):
        image_guid = thumb_id + response.url.split('/')[-1]
        return 'thumbs/%s/%s.jpg' % (thumb_id, image_guid)

    def get_media_requests(self, item, info):
        #yield Request(item['images']) # Adding meta. I don't know, how to put it in one line :-)
        for image in item['images']:
            yield Request(image)
票数 17
EN

Stack Overflow用户

发布于 2011-09-08 13:35:56

在0.12里,我解决了这样的问题

代码语言:javascript
运行
复制
class MyImagesPipeline(ImagesPipeline):

    #Name download version
    def image_key(self, url):
        image_guid = url.split('/')[-1]
        return 'full/%s.jpg' % (image_guid)

    #Name thumbnail version
    def thumb_key(self, url, thumb_id):
        image_guid = thumb_id + url.split('/')[-1]
        return 'thumbs/%s/%s.jpg' % (thumb_id, image_guid)

    def get_media_requests(self, item, info):
        yield Request(item['images'])
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6194041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档