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写的一个简单项目打包工具
May 11 NodeJs
nodejs的压缩文件模块archiver用法示例
Jan 18 NodeJs
nodejs学习笔记之路由
Mar 27 NodeJs
配置nodejs环境的方法
May 13 NodeJs
nodejs发送http请求时遇到404长时间未响应的解决方法
Dec 10 NodeJs
nodeJS进程管理器pm2的使用
Jan 09 NodeJs
nodejs微信开发之接入指南
Mar 17 NodeJs
NodeJs操作MongoDB教程之分页功能以及常见问题
Apr 09 NodeJs
nodejs文件夹深层复制功能
Sep 03 NodeJs
在NodeJs中使用node-schedule增加定时器任务的方法
Jun 08 NodeJs
nodejs+koa2 实现模仿springMVC框架
Oct 21 NodeJs
nodejs中内置模块fs,path常见的用法说明
Nov 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
多重?l件?合查?(一)
2006/10/09 PHP
用PHP实现小型站点广告管理
2006/10/09 PHP
用PHP和ACCESS写聊天室(七)
2006/10/09 PHP
PHP下用rmdir实现删除目录的三种方法小结
2008/04/20 PHP
Javascript 验证上传图片大小[客户端]
2009/08/01 Javascript
js正确获取元素样式详解
2009/08/07 Javascript
Javascript的并行运算实现代码
2010/11/19 Javascript
node.js中的path.sep方法使用说明
2014/12/08 Javascript
JS实现判断碰撞的方法
2015/02/11 Javascript
JQuery实现带排序功能的权限选择实例
2015/05/18 Javascript
全面了解函数声明与函数表达式、变量提升
2016/08/09 Javascript
AngularJS中directive指令使用之事件绑定与指令交互用法示例
2016/11/22 Javascript
vue.js指令v-model实现方法
2016/12/05 Javascript
javascript中setAttribute兼容性用法分析
2016/12/12 Javascript
JS判断键盘是否按的回车键并触发指定按钮点击操作的方法
2017/02/13 Javascript
js实现滑动到页面底部自动加载更多功能
2017/02/15 Javascript
说说Vue.js中的functional函数化组件的使用
2019/02/12 Javascript
JQuery获取可视区尺寸和文档尺寸及制作悬浮菜单示例
2019/05/14 jQuery
[02:43]2014DOTA2国际邀请赛 官方Alliance战队纪录片
2014/07/14 DOTA
Python之Scrapy爬虫框架安装及使用详解
2017/11/16 Python
python实现人人自动回复、抢沙发功能
2018/06/08 Python
Python3.4学习笔记之列表、数组操作示例
2019/03/01 Python
python3实现钉钉消息推送的方法示例
2019/03/14 Python
详解Python_shutil模块
2019/03/15 Python
Python实现删除某列中含有空值的行的示例代码
2020/07/20 Python
Python基于traceback模块获取异常信息
2020/07/23 Python
canvas拼图功能实现代码示例
2018/11/21 HTML / CSS
加拿大最大的五金、家居装修和园艺产品商店:RONA
2017/01/27 全球购物
shell变量的作用空间是什么
2013/08/17 面试题
团员学习总结的自我评价范文
2013/10/14 职场文书
起诉离婚协议书样本
2014/11/25 职场文书
房屋认购协议书
2015/01/29 职场文书
个人简历自我评价怎么写
2015/03/10 职场文书
MySQL官方导出工具mysqlpump的使用
2021/05/21 MySQL
Java中常用解析工具jackson及fastjson的使用
2021/06/28 Java/Android
MYSQL 表的全面总结
2021/11/11 MySQL