scrapy自定义下载图片的存储路径

首先,我们知道scrapy自带的下载图片存储路径为full文件夹下

在这里插入图片描述要想修改scrapy自带的下载图片存储路径,必须重写file_path方法,这里由于我们要
以spider返回的item中的title来作为图片路径名,但file_path中没有item这个参数,
因此就还要重写一个带有item参数的方法get_media_requests,具体代码如下图

在这里插入图片描述

class ImgePipeline(ImagesPipeline):

    # 自定义文件存储路径可以通过重写get_media_requests动态传参数来实现,具体得request设置meta属性
    def get_media_requests(self, item, info):
        return [Request(x, meta={"name": item['dujia_title']}) for x in item.get(self.images_urls_field, [])]

    def file_path(self, request, response=None, info=None):
        image_guid = hashlib.sha1(to_bytes(request.url)).hexdigest()
        save_path = request.meta['name']
        print(save_path)
        return f'{save_path}/%s.jpg' % (image_guid)

    def item_completed(self, results, item, info):
        print(info, results)
        # [(True, {'url': 'https://img.toutiao.io/subject%2F2114e3f8b86846fdb835dcfa580fbfbd',
        #          'path': 'full/6b83937e1a0abe50c7e9009e982792d4c1897b92.jpg',
        #          'checksum': '7d3a7a737b613805064607dcf6a598a9'})]
        path = results[0][1]['path']
        item['dujia_img_path'] = path


        return item

猜你喜欢

转载自blog.csdn.net/qq_41150890/article/details/100084255
今日推荐