1、scrapy下载一个图片集,首页显示一共有10个子页面
如:
最后下载完时,发现文件夹只有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