Scrapy下载图片的DEMO(Python)

这里使用scrapy内置的ImagePipeline来帮助我们下载图片。


详情参考:https://doc.scrapy.org/en/latest/topics/media-pipeline.html


一、 使用ImagePipeline的前提:

文档中有这么一句话 “The Images Pipeline uses Pillow for thumbnailing and normalizing images toJPEG/RGB format, so you need to install this library in order to use it.”也就是说要使用 ImagePipeline 就要先下载Pillow模块。

1,打开 https://pillow.readthedocs.io/en/latest/installation.html ,看一下warning内容,看一下自身是否存在不能正确安装的因素。

2,这里假设能正确安装,Windows下使用

pip install Pillow
来安装。
 
二、简单demo:
下载百度首页的logo
新建一个项目:
scrapy startproject Scrapy_ImagesPipeline
打开项目在spiders下建立一个spider_baidu.py的文件

 
 
import scrapy
from Scrapy_ImagesPipeline.items import ScrapyImagespipelineItem
class SpiderBaidu( scrapy. Spider):
name = "baidu"
start_urls = [ 'https://www.baidu.com/']
def parse( self, response):
item = ScrapyImagespipelineItem()
#这里偷懒,直接传入图片的链接了。
item[ 'image_urls'] = [ 'https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo/bd_logo1_31bdc765.png']
return item

items.py:

import scrapy

class ScrapyImagespipelineItem( scrapy. Item):
# define the fields for your item here like:
image_urls = scrapy.Field() #把路径放在这里,交给ImagePipeline处理
images = scrapy.Field() #ImagePipeline负责往这里填充结果。

 
settings.py
加上两个很重要的参数:
 
 
#使用内置的ImagesPipeline
ITEM_PIPELINES = {
'scrapy.pipelines.images.ImagesPipeline': 1,
}
#存储路径,存在当前目录下download_cache
IMAGES_STORE = './download_cache'
还可以在settings.py里加上一些配置,辅助下载,详情看文档,
例如:
缩略图:
IMAGES_THUMBS = {
    'small': (50, 50),
    'big': (270, 270),
}
过滤图片大小:
IMAGES_MIN_HEIGHT = 110
IMAGES_MIN_WIDTH = 110

三、运行程序,可以看到log有
{'image_urls': ['https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo/bd_logo1_31bdc765.png'],
 'images': [{'checksum': '2c946538602cbe08ccbc397e6cfbece1',
             'path': 'full/17b1ff847e4a76c36d5cf84352a5a78273b8334d.jpg',
             'url': 'https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo/bd_logo1_31bdc765.png'}]}
在当前目录下可以看到有download_cache文件下有一个full,存有图片,名称是 一长串字符串(URL的SHA1 hash )。

四、简单分析一下程序
把图片的链接给item['image_urls'],由内置的ImagePipeline处理。
ImagePipeline处理后的结果填入item['images']中

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值