美文网首页
Scrapy 下载项目图片

Scrapy 下载项目图片

作者: 暴走的金坤酸奶味 | 来源:发表于2019-01-06 17:26 被阅读0次

Scrapy提供了一个 item pipeline ,来下载属于某个特定项目的图片,比如,当你抓取产品时,也想把它们的图片下载到本地。
这条管道,被称作图片管道,在 ImagesPipeline 类中实现,提供了一个方便并具有额外特性的方法,来下载并本地存储图片:
Pillow 是用来生成缩略图,并将图片归一化为JPEG/RGB格式,因此为了使用图片管道,你需要安装这个库。 Python Imaging Library (PIL) 在大多数情况下是有效的,但众所周知,在一些设置里会出现问题,因此我们推荐使用 Pillow 而不是 PIL.

首先在setting中激活以下

ITEM_PIPELINES = {
'chinazproject.pipelines.ChinazProjectImagePipeline': 299, # 激活图片下载管道
}

pipelines

from scrapy.contrib.pipeline.images import ImagesPipeline
import scrapy
from chinazproject.items import ChinazprojectWebInfoItem,ChinazprojectTagItem
import os

取出配置文件

from scrapy.utils.project import get_project_settings

os.remove()# 重命名

获取settings文件的信息

images_store = get_project_settings().get('IMAGES_STORE')
class ChinazProjectImagePipeline(ImagesPipeline):

def get_media_requests(self,item,info):
    """
    根据图片的url地址,构造requuests请求
    :param item:
    :param info:
    :return:
    """
    if isinstance(item,ChinazprojectWebInfoItem):
        # 获取图片地址,发起请求
        img_url = 'http:'+item['coverImage']
        print('获取图片地址', img_url)
        yield scrapy.Request(img_url)

    # 如果有多个图片地址,item['coverImage']对应的是一个列表
    # img_urls = item['coverImage']
    # return [scrapy.Request(x) for x in img_urls]

def item_completed(self,results,item,info):
    """
    图片下载之后的回调结果
    :param results: [(True/False,{'path':'图片下载之后的一个储存路径','url':'图片的url地址','ckecksum':'经过HASH加密的一个字符串'})]:图片下载成功还是失败
    :param item:
    :param info:
    :return:
    """
    if isinstance(item,ChinazprojectWebInfoItem):
        paths = [result['path'] for status,result in results if status]
        print('图片下载结果',results)
        if len(paths)>0:
            print('图片下载成功')
            # 使用os的rename方法修改文件的名称
            os.rename(images_store+'/'+paths[0],images_store+'/'+item['title']+'.jpg')
            image_path = images_store+'/'+item['title']+'.jpg'
            print('修改后的路径',image_path)
            item['locakImgePath'] = image_path

        else:
            # 如果没有成功获取到图片,将这个item丢弃
            from scrapy.exceptions import DropItem
            raise DropItem('没有获取到图片,遗弃item')
     # 获取图片地址,交给下一个管道处理
    return item

相关文章

  • Scrapy 下载项目图片

    Scrapy提供了一个 item pipeline ,来下载属于某个特定项目的图片,比如,当你抓取产品时,也想把它...

  • Scrapy 下载项目图片

    Scrapy提供了一个 item pipeline ,来下载属于某个特定项目的图片,比如,当你抓取产品时,也想把它...

  • scrapy下载图片

    首先看一下爬取的流程: 在一个爬虫里,你抓取一个项目,把其中图片的 URL 放入“image_urls”组内。项目...

  • 六、图片的下载

    一、实现scrapy 自动下载图片到本地的功能,通过项目管道设置。 首先要在setting中搭建pipeline的...

  • Scrapy爬虫框架(六) ------ 图片管道

    1. 介绍 Scrapy提供了一个 item pipeline ,来下载属于某个特定项目的图片,比如,当你抓取产品...

  • 2018-07-15

    Scrapy框架学习 - 使用内置的ImagesPipeline下载图片 需求分析 需求:爬取斗鱼主播图片,并下载...

  • scrapy图片下载

    1.图片下载 第一种:正常那个的发起请求,获取图片的二进制文件,保存第二种:自定义图片管道,继承自ImagePip...

  • 爬虫(4-1 4-2)

    4-1 scrapy安装以及目录结构介绍用过豆瓣源下载scrapy 2 将scrapy模板导入项目工程 4-2 p...

  • Scrapy如何开启重复下载?

    Scrapy下载图片的时候,默认如果两个Url相同的话,就不会再下载第2个了。 使用下面的方法可以让Scrapy开...

  • scrapy 初体验(这车很稳)

    scrapy 爬虫 目标把gank上的图片趴下来 镇楼图 // 初始化项目scrapy startproject ...

网友评论

      本文标题:Scrapy 下载项目图片

      本文链接:https://www.haomeiwen.com/subject/frgsrqtx.html