nodejs实现爬取网站图片功能


Posted in NodeJs onDecember 14, 2017

通过实例给大家讲解nodejs实现爬取网站图片功能,以下就是全部内容:

原理:

爬虫是最明显的IO密集型应用场景,显然用node,使得I/O等待开销小数据挖掘比较方便

借助express模块来搭建node服务

并使用request模块获取目标页面的html代码

下载cheerio模块对html代码做处理(cheerio类似jQuery的语法,所以好用又方便)

环境配置:

npm install express request cheerio --save

(1)引入各个模块

var http = require('http');
var request = require('request);
var cheerio = require('cheerio');
var fs = require('fs'); //用来操作文件
var url = 'https://movie.douban.com/cinema/nowplaying/beijing/' //定义要爬的页面

(2)发送请求

http.get(function(res){
  var html = '';
  var titles = [];
  res.setEncoding('utf-8') //防止中文乱码
  res.on('data',function(chunk){
    html += chrunk;    //监听data事件 每次取一块数据
  })
  res.on('end',function(){
    var $ = cheerio.load(html);  //获取数据完成后,解析html
    //将获取的图片存到images文件夹中
    $('.mod-bd img').each(function(index, item){
      //获取图片属性
      var imgName = $(this).parent().next().text().trimg()
      var imgfile = imgName + '.jpeg';
      var imgSrc = $(this).attr('src')
      //采用request模块,向服务器发起请求 获取图片资源
      request.head(imgSrc, function(error, res,body){
        if(error){
          console.log('失败了')
        }
      });
      //通过管道的方式用fs模块将图片写到本地的images文件下
      request(imgSrc).pipe.(fs.createWriteStream('./images/' + imgfile));
    })
    
  })
})
NodeJs 相关文章推荐
nodejs npm install全局安装和本地安装的区别
Jun 05 NodeJs
nodejs中实现sleep功能实例
Mar 24 NodeJs
NodeJS的Promise的用法解析
May 05 NodeJs
Nodejs进阶:基于express+multer的文件上传实例
Nov 21 NodeJs
NodeJs中express框架的send()方法简介
Jun 20 NodeJs
Express+Nodejs 下的登录拦截实现代码
Jul 01 NodeJs
深入解析nodejs HTTP服务
Jul 25 NodeJs
nodejs创建简易web服务器与文件读写的实例
Sep 07 NodeJs
nodejs+mongodb aggregate级联查询操作示例
Mar 17 NodeJs
nodejs搭建本地服务器轻松解决跨域问题
Mar 21 NodeJs
详解NodeJs开发微信公众号
May 25 NodeJs
Nodejs异步流程框架async的方法
Jun 07 NodeJs
NodeJs form-data格式传输文件的方法
Dec 13 #NodeJs
nodejs实现截取上传视频中一帧作为预览图片
Dec 10 #NodeJs
nodejs实现大文件(在线视频)的读取
Oct 16 #NodeJs
nodejs发送http请求时遇到404长时间未响应的解决方法
Dec 10 #NodeJs
NodeJs实现定时任务的示例代码
Dec 05 #NodeJs
windows系统下更新nodejs版本的方案
Nov 24 #NodeJs
nodejs项目windows下开机自启动的方法
Nov 22 #NodeJs
You might like
php下把数组保存为文件格式的实例应用
2010/02/08 PHP
php实现读取手机客户端浏览器的类
2015/01/09 PHP
PHP实现简单实用的分页类代码
2016/04/08 PHP
thinkphp项目如何自定义微信分享描述内容
2017/02/20 PHP
如何让您的中波更粗更长 - 中波框形天线制作
2021/03/10 无线电
document.designMode的功能与使用方法介绍
2007/11/22 Javascript
javascript Event对象详解及使用示例
2013/11/22 Javascript
JS中attr和prop属性的区别以及优先选择示例介绍
2014/06/30 Javascript
JS实现表格数据各种搜索功能的方法
2015/03/03 Javascript
js实现透明度渐变效果的方法
2015/04/10 Javascript
JS+CSS实现带小三角指引的滑动门效果
2015/09/22 Javascript
理解JavaScript事件对象
2016/01/25 Javascript
Jquery $when done then的用法详解
2016/05/20 Javascript
解决VUE框架 导致绑定事件的阻止冒泡失效问题
2018/02/24 Javascript
jquery实现Ajax请求的几种常见方式总结
2019/05/28 jQuery
vue 中 命名视图的用法实例详解
2019/08/14 Javascript
vue语法自动转typescript(解放双手)
2019/09/18 Javascript
vue.js 解决v-model让select默认选中不生效的问题
2020/07/28 Javascript
jquery实现图片放大镜效果
2020/12/23 jQuery
Vue项目打包部署到apache服务器的方法步骤
2021/02/01 Vue.js
JavaScript 中的执行上下文和执行栈实例讲解
2021/02/25 Javascript
[03:18]DOTA2放量测试专访820:希望玩家加入国服大家庭
2013/08/25 DOTA
Python入门篇之字典
2014/10/17 Python
状态机的概念和在Python下使用状态机的教程
2015/04/11 Python
Django中的CBV和FBV示例介绍
2018/02/25 Python
Django rest framework工具包简单用法示例
2018/07/20 Python
python实现五子棋小游戏
2020/03/25 Python
Python应用实现处理excel数据过程解析
2020/06/19 Python
物业管理求职自荐信
2013/09/25 职场文书
商场端午节活动方案
2014/01/29 职场文书
党员实事承诺书
2014/03/26 职场文书
校园环保标语
2014/06/13 职场文书
个人自查自纠材料
2014/10/14 职场文书
2014年英语教师工作总结
2014/12/03 职场文书
单身申明具结书
2015/02/26 职场文书
使用ORM新增数据在Mysql中的操作步骤
2021/07/26 MySQL