zoukankan      html  css  js  c++  java
  • 通过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

  • 相关阅读:
    BZOJ 1500 维修数列
    BZOJ 1501 智慧珠游戏
    BZOJ 1507 Editor
    BZOJ 3223 文艺平衡树
    BZOJ 3224 普通平衡树
    BZOJ 3196 二逼平衡树
    BZOJ 1048 分割矩阵
    BZOJ 1047 理想的正方形
    BZOJ 1046 上升序列
    BZOJ 1045 糖果传递
  • 原文地址:https://www.cnblogs.com/attitudeY/p/7078559.html
Copyright © 2011-2022 走看看