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服务器(9):实现非阻塞操作
Dec 18 NodeJs
Nodejs 获取时间加手机标识的32位标识实现代码
Mar 07 NodeJs
nodejs中向HTTP响应传送进程的输出
Mar 19 NodeJs
初识NodeJS服务端开发入门(Express+MySQL)
Apr 07 NodeJs
详解Nodejs之npm&package.json
Jun 15 NodeJs
nodejs之get/post请求的几种方式小结
Jul 26 NodeJs
Nodejs 复制文件/文件夹的方法
Aug 24 NodeJs
详解nodejs通过响应回写的方式渲染页面资源
Apr 07 NodeJs
nodejs前端模板引擎swig入门详解
May 15 NodeJs
NodeJS实现自定义流的方法
Aug 01 NodeJs
手把手教你如何使用nodejs编写cli命令行
Nov 05 NodeJs
Nodejs实现的操作MongoDB数据库功能完整示例
Feb 02 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
第八节--访问方式
2006/11/16 PHP
PHP 时间转换Unix时间戳代码
2010/01/22 PHP
IE8 下的Js错误HTML Parsing Error...
2009/08/14 Javascript
鼠标事件延时切换插件
2011/03/12 Javascript
如何使用json在前后台进行数据传输实例介绍
2013/04/11 Javascript
jquery复选框全选/取消示例
2013/12/30 Javascript
JavaScript调用ajax获取文本文件内容实现代码
2014/03/28 Javascript
JavaScript设计模式之适配器模式介绍
2014/12/28 Javascript
js实现跟随鼠标移动且带关闭功能的图片广告实例
2015/02/26 Javascript
AngularJS中处理多个promise的方式
2016/02/02 Javascript
javascript瀑布流式图片懒加载实例解析与优化
2016/02/23 Javascript
js防阻塞加载的实现方法
2016/09/09 Javascript
javascript replace()第二个参数为函数时的参数用法
2016/12/26 Javascript
原生js实现对Ajax的封装(仿jquery)
2017/01/22 Javascript
详解vue2.0组件通信各种情况总结与实例分析
2017/03/22 Javascript
JavaScript如何一次性展示几万条数据
2017/03/30 Javascript
基于JavaScript实现飘落星星特效
2017/08/10 Javascript
jquery.onoff实现简单的开关按钮功能(推荐)
2018/05/24 jQuery
微信公众号H5支付接口调用方法
2019/01/10 Javascript
微信小程序出现wx.getLocation再次授权问题的解决方法分析
2019/01/16 Javascript
泛谈JS逻辑判断选择器 || &&
2019/05/24 Javascript
[02:03]《现实生活中的DOTA2》—林书豪&DOTA2职业选手出演短片
2015/08/18 DOTA
python实现监控linux性能及进程消耗性能的方法
2014/07/25 Python
Python map和reduce函数用法示例
2015/02/26 Python
浅谈Python基础之I/O模型
2017/05/11 Python
python中实现数组和列表读取一列的方法
2018/04/03 Python
在windows下Python打印彩色字体的方法
2018/05/15 Python
Pandas透视表(pivot_table)详解
2019/07/22 Python
Python实现图像去噪方式(中值去噪和均值去噪)
2019/12/18 Python
python实现猜拳游戏项目
2020/11/30 Python
Python新建项目自动添加介绍和utf-8编码的方法
2020/12/26 Python
普天C++笔试题
2016/03/20 面试题
应届大学生自荐信格式
2013/09/21 职场文书
甜美蛋糕店创业计划书
2014/01/30 职场文书
2014年作风建设心得体会
2014/10/22 职场文书
年底个人总结范文
2015/03/10 职场文书