除了使用自带的ImagePipelines方法外,还可以自己在pipelines写一个request,把图片保存下来。
其它的都不在赘述,直接上pipelines。
Pipelines.py
# -*- coding: utf-8 -*-
# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: http://doc.scrapy.org/en/latest/topics/item-pipeline.html
import os
import urllib2
class MmxyzPipeline(object): #这个pipelines就是项目建立时候自动生成的,直接用就行
def process_item(self, item, spider):
os.chdir('/Users/cgs/image/mmxyz') #先切换到图片存放路径下
if not os.path.exists(item['title'][0]): #判断套图文件夹是否存在
os.mkdir(item['title'][0]) #不存在就直接建利套图目录
os.chdir(item['title'][0]) #切换到套图目录下
i = item['image'] #准备遍历套图下的所有图片
for I in i:
if I:
request = urllib2.Request(I)
response = urllib2.urlopen(request).read()
with open(I[-7:],'wb') as f: #保存图片
f.write(response)
虽然这个方法也可以实现按照原来的图片名保存图片,但是鉴于存在写图片到本地的时候无法多并发,因而相对于ImagePipelines绘慢很多。所以使用ImagePipelines,并对其进行一些小改造会是一个更好的方法。