通过scrapy内置的ImagePipeline下载图片到本地

Posted AttitudeY

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过scrapy内置的ImagePipeline下载图片到本地相关的知识,希望对你有一定的参考价值。

1.通过scrapy内置的ImagePipeline下载图片到本地

2.获取图片保存本地的地址

1.通过scrapy内置的ImagePipeline下载图片到本地

1)在settings.py中打开 ITEM_PIPELINES 的注释,在  ITEM_PIPELINES 中加入

ITEM_PIPELINES = {
   \'spider_first.pipelines.SpiderFirstPipeline\': 300,
\'scrapy.pipelines.images.ImagesPipeline\':5,
#后面的数字代表执行优先级 ,当执行pipeine的时候会按照数字由小到大执行
}

2)settings.py中加入

IMAGES_URLS_FIELD ="image_url"  #image_url是在items.py中配置的网络爬取得图片地址
#配置保存本地的地址
project_dir=os.path.abspath(os.path.dirname(__file__)) #获取当前爬虫项目的绝对路径
IMAGES_STORE=os.path.join(project_dir,\'images\') #组装新的图片路径

 还有很多设置有特殊需要的话可以用哦 (详情可以去imagepipeine源码查看)

   IMAGES_MIN_HEIGHT=100   #设定下载图片的最小高度

   IMAGES_MIN_WIDTH=100  #设定下载图片的最小宽度

    ........

可能报错:

ModuleNotFoundError: No module named \'PIL\'

安装pillow库即可
pip install pillow

启动爬虫 ,即可images文件夹下看到下载的图片

 

2.获取图片保存本地的地址

1是下载图片,如果想获取图片保存本地的地址,则需要重写ImagesPipeline,并且在setting中调用重写的pipeline

#既然要重写,记得提前引入
from scrapy.pipelines.images import ImagesPipeline

class ArticleImagePipeline(ImagesPipeline):
# 重载ImagePipeline中的item_completed方法,获取下载地址
def item_completed(self, results, item, info):

  for ok,value in results:   #通过断点可以看到图片路径存在results内

    image_file_path=value[\'path\'] #将路径保存在item中返回

    item[\'front_image_path\']=image_file_path
  return item

 

以上是关于通过scrapy内置的ImagePipeline下载图片到本地的主要内容,如果未能解决你的问题,请参考以下文章

scrapy下载图片第一波

使用Scrapy自带的ImagesPipeline下载图片,并对其进行分类。

scrapy爬取图片

17 Scrapy内置爬虫CrawlSpider和Spider的差异、使用正则分析链接

linux下scrapy环境搭建

爬虫日记(65):Scrapy的设置参数-Telnet