Python:使用Scrapy框架的Imagepipeline组件如何下载gif呢?

默认情况下,使用ScrapyImagePipeline组件下载图片的时候,不论之前的图片格式是png还是gif,都会被保存成jpeg格式。
通过重写file_path方法,可以将图片以原来的格式和原图片名称进行保存。


重写file_path方法

__author__ = 'Fly'  
#coding:utf-8  
from scrapy.contrib.pipeline.images import ImagesPipeline  
from scrapy.http import Request  
from scrapy.exceptions import DropItem  

class MyImagesPipeline(ImagesPipeline):  
    def file_path(self, request, response=None, info=None):  
        image_guid = request.url.split('/')[-1]  
        return 'full/%s' % (image_guid)  

    def get_media_requests(self, item, info):  
        for image_url in item['image_urls']:  
            yield Request(image_url)  

    def item_completed(self, results, item, info):  
        image_paths = [x['path'] for ok, x in results if ok]  
        if not image_paths:  
            raise DropItem("Item contains no images")  
        return item


运行结果

图片URL:http://www.baidu.com/1.gif
保存到本地:1.gif
但是,当打开1.gif的时候,发现原本动态的图片现在却变成静态的了。
请问,有谁知道怎么处理吗?


为您推荐了相关的技术文章:

  1. 在Android N上对Java方法做hook遇到的坑 - 记事本
  2. 看雪CTF2017第二题lelfeiCM的writeup
  3. PHP HOOK的若干方法 - Exploit的小站~ - 博客频道
  4. 详解 Cookie 纪要
  5. 谈谈 Vim 的几种文件备份

原文链接: segmentfault.com