三.异步传递参数 meta
yield scrapy.Request(url=url_tab2,callback=self.get_detail,meta=img_url)
items[‘picture’] = response.meta.get(‘img_url’,’’)
四.保存图片
1.setting.py中:
ITEM_PIPELINES = {
‘jobbole_scrapy.pipelines.MongoPipeline’: 300,
‘scrapy.pipelines.images.ImagesPipeline’:1, # 指定处理类
}
#指定哪个item字段需要用来下载图片
# 需要采用列表形式保存 items[‘picture’] = [response.meta.get(‘img_url’,’’)],
IMAGES_URLS_FIELD = ‘picture’
#指定图片的保存路径
#os.path.dirname(file) 获取当前文件的名称
#os.path.abspath() 获取文件的绝对路径
image_dir = os.path.abspath(os.path.dirname(file))
IMAGES_STOPE = os.path.join(image_dir,‘images’) # 拼接路径
2.加载pillow库
3.在pipeline.py中增加新的处理类,继承自scrapy.pipelines.images.ImagesPipeline,并改写item_completed方法
class ArticleImagePipeline(ImagesPipeline):
def item_completed(self, results, item, info):
for ok,value in results:
images_path = value[‘path’]
item[‘picture_path’] = images_path
return item
4.对url进行hash
def get_url_hash(url):
if isinstance(url,str): # 判断url是不是unicode格式
url = url.encode(‘utf-8’) # 转换为utf-8格式
m = hashlib.md5()
m.update(url)
return m.hexdigest()