node读取图片,node获取本地图片并显示

  node读取图片,node获取本地图片并显示

  如何使用Node抓取?下面这篇文章带你谈谈利用Node.js开发一个简单的图片抓取功能,希望对你有帮助!

  node.js速度课程简介:进入学习

  爬虫的主要目的是收集互联网上发布的一些特定数据。利用这些数据,我们可以分析一些趋势,或者训练模型做深度学习等等。本期我们将介绍一个专门用于网页抓取的node.js包—— node-crawler,我们将用它来完成一个简单的爬虫案例抓取网页上的图片并下载到本地。

  

正文

   node-crawler是一款轻量级node.js爬虫工具,兼顾效率和便捷,支持分布式爬虫系统、硬编码和http前置级代理。而且完全由nodejs编写,天然支持非阻塞异步IO,为爬虫的流水线机制提供了极大的便利。同时支持快速选择DOM(可以使用jQuery语法),对于抓取网页特定部分的任务来说可以说是杀手级功能,不需要手工编写正则表达式,提高了爬虫开发的效率。

  

安装引入

  让我们首先创建一个新项目,并创建index.js作为其中的入口文件。

  然后安装爬虫库节点-crawler。

  # PNPM

  pnpm添加爬网程序

  # NPM

  npm i -S爬虫

  #纱线

  然后根据需要引入纱线添加履带。

  //index.js

  const Crawler=require( Crawler );

创建实例

   //index.js

  let crawler=新Crawler({

  超时:10000,

  jQuery:真的,

  })

  函数获取图像(uri) {

  爬虫.队列({

  uri,

  回调:(错误,结果,完成)={

  if(err)throw err;

  }

  })

  }从现在开始,我们开始写一个获取html页面图片的方法。爬虫被实例化后,主要用于在其队列中编写链接和回调方法。这个回调函数将在每个请求被处理后被调用。

  这里还需要注意的是,爬虫使用的是请求库,所以爬虫可以配置的参数列表是请求库参数的超集,即请求库中的所有配置在爬虫中都适用。

  

元素捕获

  也许你刚才也看到了参数jQuery。你猜对了,它可以使用jQuery的语法来捕获DOM元素。

  //index.js

  let data=[]

  函数获取图像(uri) {

  爬虫.队列({

  uri,

  回调:(错误,结果,完成)={

  if(err)throw err;

  let $=res. $

  尝试{

  设$ imgs=$( img );

  Object.keys($imgs)。forEach(index={

  let img=$ imgs[index];

  const { type,name,attribs={ } }=img

  设src=attribs.src

  if (type===tag src!数据包括(src)) {

  let fileSrc=src . starts with( http )?src : `https:${src}

  设fileName=src . split(/)[src . split(/)。长度-1]

  Downloadfile (filesrc,filename)//下载图片的方法

  数据推送(src)

  }

  });

  } catch (e) {

  控制台.错误(e);

  完成()

  }

  done();

  }

  })

  }您可以看到请求中的img标签的捕获刚刚由$完成,然后我们下面的逻辑处理已完成图片的链接,并去掉名称,以便以后保存。这里还定义了一个数组。其目的是保存捕获的图像地址。如果在下一次捕获中找到相同的图像地址,将不会重复下载。

  以下是$(img )在掘金首页html中抓取的信息:

  下载图片

  在下载之前,我们必须安装一个nodejs包—— axios。是的,你是对的。axios不仅提供给前端,也提供给后端。但是因为下载图片需要处理成数据流,所以responseType设置为stream。然后,您可以使用管道方法来保存数据流文件。

  const { default:axios }=require( axios );

  const fs=require( fs );

  异步函数下载文件(uri,名称){

  设dir=。/imgs

  如果(!fs.existsSync(dir)) {

  等待fs.mkdirSync(目录)

  }

  let file path=` { dir }/{ name } ` 1

  让RES=wait axios({

  url: uri,

  响应类型:“流”

  })

  让ws=fs . createwritestream(file path)

  资源数据管道(ws)

  res.data.on(close ,()={

  ws . close();

  })

  }因为图片可能很多,如果要放在一个文件夹下,就要判断有没有这样的文件夹,如果没有就创建一个。然后通过createWriteStream方法,将获取的数据流以文件的形式保存到文件夹中。

  然后我们可以尝试一下,比如我们抓取并使用掘金的主页html下的图片:

  //index.js

  Get getImages(https://juejin.cn//)被执行,你可以找到静态html中捕获的所有图片。

  节点索引. js

  结语

  最后还可以看到这段代码可能不适用于SPA(单页应用)。由于在单页面应用程序中只有一个HTML文件,并且网页上的所有内容都是动态呈现的,所以它总是相同的。在任何情况下,您都可以直接处理其数据请求来收集所需的信息。

  还有一点要说的是,很多小伙伴用request.js处理下载图片的请求。当然,这是可能的,即使代码更少。但是,我想说,这个库2020年就废弃了,最好换一个更新维护过的库。

  更多关于node的信息,请访问:nodejs教程!以上是如何使用Node.js开发一个简单的图片抓取功能的详细说明。请多关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: