仔细看了下scrapy的官方文档关于ImagesPipeline的介绍说明及使用例子:Downloading Item Images
感觉官方文档太过简单。
比如:通过在setting.py
文件中通过给IMAGES_STORE
赋值,就可以指定图片的保存路径。
并且默认情况下,文件名是通过对url使用SHA1 hash得来的。
现在我想以原来的图片名进行保存,不知道该如何做,希望有经验的朋友帮忙指点下~
另外求大家帮忙推荐下关于scrapy的相关书籍(中英文都行)
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
查看下ImagePipeline的源码,发现可以重写file_path函数以修改图片名称,例如:
ImagePipeline的源码如下:
貌似这个没有直接的参数可以传,需要自己实现Images Pipeline
scrapy.contrib.pipeline.images.ImagesPipeline
类的get_media_requests(item, info)
会下载图片,并把结果喂给item_completed()
方法,结果是一个tuple,(success, image_info_or_failure)
,其中success
是下载是否成功的bool,image_info_or_failure
包括url
、path
和checksum
三项。其中,path
就是相对于IMAGES_STORE
的路径(含文件名)。上面是官网上的例子。
所以你需要做的是改写
item_completed(results, items, info)
方法,用原本的文件名替换掉item['image_paths']
。修改file_path对原代码侵入太大,如果只是为了修改文件路径的话,可以在item_completed对文件进行重命名。