scrapy下载umic图片终结

版权声明:工作和生活的点点滴滴都应该记录下来! https://blog.csdn.net/u011350541/article/details/81037181

1、scrapy下载一个图片集,首页显示一共有10个子页面
如:

http://www.umei.cc/p/gaoqing/rihan/93106.htm

最后下载完时,发现文件夹只有5张图片。

后面一路debug发现这10个页面里,包含有重复的图片路径,scrapy会自动去重,所以实际只会下载5张

如果不想去重,可以设置不过滤重复链接,如下

    def get_media_requests(self, item, info):
        for image_url in item['image_urls']:
            self.insert_img(item)
            yield Request(image_url,dont_filter=True)

2、想获取图片路径时,每一个图片的地址都必须有一次request请求,而scrpay是异步下载,因此无法将所有的图片路径一次收集完再执行下载item。

最后的解决办法是:每请求一次页面就下载一次,根据请求页面的路径生成文件夹,将同一图集的图片放在同一文件夹下。
重写了scrapy 图片管道默认的图片路径生成方法

    def file_path(self, request, response=None, info=None):
        url = request.url
        postfix = url.split('/')[-1].split('.')[-1]
        item = request.meta['item']
        imageName = item['url'].split('/')[-1][0:-4].split('_')[-1]
        category = item['url'].split('/')[-2]
        folder = item['name']
        return '%s/%s/%s.%s' % (category,folder,imageName,postfix)

代码地址:
https://github.com/libp/SpiderScrapyArticle/tree/master/z2

猜你喜欢

转载自blog.csdn.net/u011350541/article/details/81037181