我们在网站爬取图片时,会遇到图片url的地址相同,但是图片不一样的情况,使用requests.get和urllib.request.urlretrieve的方法是可以重复下载的,但是效率太低,这时我们就想到了scrapy的内置方法继承ImagesPipeline类来下载图片,提高效率。但是此时我们会遇到一个问题,那就是scrapy会有自动去重功能,这时我们会想到,那我加dont_filter=True不就可以了,不让他去重。但是当我们运行后会发现,没有起到作用。
解决方法:
这时我们需要修改scrapy ImagesPipeline类的底层源码,也可以重写他的方法,奈何本人还没有到那种境界,所以这里我们进行框架源码的修改。
1.在我们继承ImagesPipeline时**我们按住ctrl键,鼠标左键点击ImagesPipeline进入他的父类。
2.点击后进入这个界面,在点击FilePipeline,
3.相同操作,点击MediaPipeline
4.最后进入到最底层MediaPipeline
5.找到100行至109行
6.对红色框内的进行注释即可解决该问题
如下:
注意,如果你是第一次注释框架源码,它会跳一个框出来,默认点ok就行了
然后在运行代码,问题就解决了,但是如果多个项目同时运行势必会影响到其他项目,所以如果可以的话还是重写该方法为好,奈何境界不够,需努力修行。