首先,我们知道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