自定义的初衷是:想修改保存文件的默认名称, 我们希望保留图片原始的文件名。 此外,scrapy图片的下载过滤策略是用了过期时间,可以通过在settings.py中配置如下参数来设置图片的过期时间:

IMAGES_EXPIRES = 90

但是对我们抓取百度百科的业务,一张图片如果已经抓取过,则不需要再重新抓取,所以这个是一次性的, 因为图片发生变化的可能性很小,所以没有必要做重复性的抓取

于是,基于需求我覆写了ImagesPipeline类

from relationMongoService import relationPicClientclass CrawlImagePipeline(ImagesPipeline):#修改默认的sha1的文件命名方式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):if isinstance(item, CrawlImageItem):for image_url in item['image_urls']:image_guid = request.url.split('/')[-1]docs = relationPicClient.find({'baiduPicId': image_guid})   if not docs or docs.count() == 0:self.default_headers['referer'] = image_urlyield Request(image_url, dont_filter=False)#图片下载完毕后这个方法会被调用def item_completed(self, results, item, info):if isinstance(item, CrawlImageItem):image_paths = [x['path'] for ok, x in results if ok]if not image_paths:raise DropItem('item contains no images')else:#设置图片保存的路径供后续使用item['image_paths'] = image_pathsreturn itemelse:return item

通过覆写file_path函数,就可以定制自己的图片文件名,我们取了图片url最后的一个40位长的id作为图片的文件名

并在get_media_requests函数中来构造下载图片的Request对象

这里有我们自己的过滤策略:

因为我们下载过的图片我们会存到mongo中, 这里会基于图片的id从我们的mongo库里面查,只针对那些还没有下载的图片才构造Request重新下载

另外,我们存储图片到mongo不是在抓取系统里面做的, 因为下载下来的图片还要去水印和上传,针对这两个步骤我们还有一套单独的流程

这里的relationPicClient是我们的mongo的一个客户端对象

当然,还需要在settings.py中配置:

ITEM_PIPELINES = {'CrawlBaiduMobile.pipelines.CrawlImagePipeline': 301
}IMAGES_STORE  = '/search/odin/dlj/CrawlBaiduMobile/image_storage'

scrapy自定义网页中图片的下载策略相关推荐

  1. python 实现获取与下载网页中图片的四种方案

    前言 当要获取页面上的图片,我们常规的做法是: 在图片上点击鼠标右键, 然后选择 图片另存为, 弹出保存窗口, 选择或输入保存的位置, 点击 确定 按钮即可. 那么,如果我们想要使用python在脚本 ...

  2. html图片5秒后消失,如何让网页中图片等待5秒再显示_html/css_WEB-ITnose

    如何让网页中图片等待5秒再显示. 网页打开的时候,网页中的图片就会马上显示.如何让某一个图片,在网页打开后5秒在显示出来. 回复讨论(解决方案) 1. 图片载入有判别事件,在事件中设置图片对象的显示隐 ...

  3. 手机端网页中图片之间出现白线的解决方法

    手机端网页中图片之间出现白线的解决方法 参考文章: (1)手机端网页中图片之间出现白线的解决方法 (2)https://www.cnblogs.com/syzdidi/p/9686463.html 备 ...

  4. JAVA获取网页中的电影下载地址小程序

    现在电影资源越来越少了,今天想看看吸血鬼日记,结果网上搜出的网址不支持迅雷批量下载,我一个一个点,很累.于是就看看网页源代码发现影片都以FTP开头,rmvb结尾.于是就写了个小程序能够获取网页中所有的 ...

  5. js删除网页中图片width 和 height

    js删除网页中图片width 和 height 一段代码轻松搞定 适用于: 电脑端网页带图片属性导致移动网页显示错位/错误 备注: 需搭配jquery.min.js (注!jquery-2.0以上版本 ...

  6. php提取网页mp3,怎么提取网页中的音乐|下载网页中的音乐 网页音乐提取工具及使用教程分享...

    相信很多人都比较了解怎么下载网页上的视频吧,那么现在怎么提取网页中的音乐或者说怎么下载网页中的音乐 ,嗯~ o(* ̄▽ ̄*)o ,不懂的孩纸,路过走过不要错过啦,快来看看小编分享的网页音乐提取工具及使 ...

  7. 在html上点击一张图片时放大照片,网页中图片自动缩小,点击放大(以防页面被撑大)的方法...

    我们在开发动态网站的时候,一般都会在后台让用户添加文章,在添加文章的过程中难免用户会添加一些大的图片,这样,在前台显示的时候图片就会把页面撑的很大,很难看,今天就教大家利用JavaScript函数来实 ...

  8. 网页中图片旋转的几种实现方式

    网页中图片旋转一般有下面三种常见的实现方式: 一. ie 滤镜 IE的图形旋转滤镜,通过指定BasicImage滤镜的rotation值旋转元素,旋转方向为顺时针,旋转的中心点为元素的左上角.rota ...

  9. html多选框放在图片上,网页中图片格式问题地总结.doc

    网页中图片格式问题地总结 HYPERLINK "file:///C:\\Users\\Administrator\\Desktop\\图片格式与设计那点事儿%20-%20TaobaoUED_ ...

最新文章

  1. 不会用Photoshop抠图?Mask R-CNN助你一键“除”人
  2. 使用特异性特征提取网络辅助分类任务
  3. python训练营免费领取-21天训练营丨Python量化投资打卡第五期!学完押金全返!...
  4. POJ2155二维线段树
  5. AB1601的OTA区224K存储空间的使用注意事项
  6. 双11,2分钟狂挣20亿的神秘大厂,急招.NET!
  7. 多方安全计算:隐私保护集合求交技术
  8. CentOS 7在虚拟机上安装之后没有桌面问题
  9. button的格式的问题
  10. Java项目性能监控和调优工具-Javamelody
  11. 了解GDAL的图像处理/Python
  12. 介绍make menuconfig中的每个选项含义
  13. java-工具-开源
  14. 思科模拟配置文件服务器,思科模拟服务器配置教程
  15. python分组统计excel数据_在python中对数据进行分组并与excel进行比较
  16. 明解C语言 入门 课后习题练习答案 第四章(1)
  17. ultravnc download windows 7,ultravnc download windows 7软件的4大优势
  18. 16 个百度网盘搜索引擎
  19. [置顶] 程序员的奋斗史(二十八)——寒门再难出贵子?
  20. 这里告诉你如何计算算法的时间复杂度(大O阶)

热门文章

  1. 计蒜客 2019 蓝桥杯省赛 B 组模拟赛(一)
  2. HDU 6356.Glad You Came-线段树(区间更新+剪枝) (2018 Multi-University Training Contest 5 1007)...
  3. ssh 执行多条命令包含awk的用法
  4. 【图论】求无向连通图的割点
  5. 根据屏幕大小制定显示页面
  6. C#的语法总结(第一版)
  7. 06-02 Jenkins job 机制
  8. tidyr | 对数据框分行或分列进行嵌套操作
  9. 计算机python指什么_Python是什么?
  10. 2060显卡驱动最新版本_聊一款现阶段性价比爆炸的显卡——铭瑄RTX2070 SUPER 电竞之心 OC...