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学习笔记之网络编程
Aug 03 NodeJs
基于NodeJS的前后端分离的思考与实践(一)全栈式开发
Sep 26 NodeJs
nodejs实现HTTPS发起POST请求
Apr 23 NodeJs
使用Angular和Nodejs、socket.io搭建聊天室及多人聊天室
Aug 21 NodeJs
详解如何在NodeJS项目中优雅的使用ES6
Apr 22 NodeJs
Nodejs 和Session 原理及实战技巧小结
Aug 25 NodeJs
ubuntu编译nodejs所需的软件并安装
Sep 12 NodeJs
Nodejs模块载入运行原理
Feb 23 NodeJs
详解redis在nodejs中的应用
May 02 NodeJs
NodeJs项目中关闭ESLint的方法
Aug 09 NodeJs
nodejs aes 加解密实例
Oct 10 NodeJs
浅谈使用nodejs搭建web服务器的过程
Jul 20 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树的代码,可以嵌套任意层
2006/10/09 PHP
截获网站title标签之家内容的例子
2006/10/09 PHP
在yii中新增一个用户验证的方法详解
2013/06/20 PHP
php读取mssql的ntext字段返回值为空的解决方法
2014/12/30 PHP
php项目中百度 UEditor 简单安装调试和调用
2015/07/15 PHP
PHP加密解密函数详解
2015/10/28 PHP
PHP设计模式之模板方法模式实例浅析
2018/12/20 PHP
详解PHP实现支付宝小程序用户授权的工具类
2018/12/25 PHP
关于JAVASCRIPT urldecode URL解码的问题
2012/01/08 Javascript
php对mongodb的扩展(小试牛刀)
2012/11/11 Javascript
Nodejs+express+html5 实现拖拽上传
2014/08/08 NodeJs
jQuery回调函数的定义及用法实例
2014/12/23 Javascript
JavaScript实现反转字符串的方法详解
2017/04/27 Javascript
JavaScript分步实现一个出生日期的正则表达式
2018/03/22 Javascript
浅谈在node.js进入文件目录的问题
2018/05/13 Javascript
react.js组件实现拖拽复制和可排序的示例代码
2018/08/20 Javascript
使用vue-cli3 创建vue项目并配置VS Code 自动代码格式化 vue语法高亮问题
2019/05/14 Javascript
详解element-ui级联菜单(城市三级联动菜单)和回显问题
2019/10/02 Javascript
vue项目实现减少app.js和vender.js的体积操作
2020/11/12 Javascript
phpsir 开发 一个检测百度关键字网站排名的python 程序
2009/09/17 Python
pymongo实现多结果进行多列排序的方法
2015/05/16 Python
python查看FTP是否能连接成功的方法
2015/07/30 Python
Python如何为图片添加水印
2016/11/25 Python
Django中的forms组件实例详解
2018/11/08 Python
Python的条件表达式和lambda表达式实例
2019/01/31 Python
HTML5+CSS3实现拖放(Drag and Drop)示例
2014/07/07 HTML / CSS
海滩咖啡馆:Beach Cafe
2018/02/02 全球购物
《临死前的严监生》教学反思
2014/02/13 职场文书
读书活动总结范文
2014/04/26 职场文书
核心价值观演讲稿
2014/05/13 职场文书
小学竞选班长演讲稿
2014/09/09 职场文书
2014应届本科生自我评价
2014/09/13 职场文书
检察院对照“四风”认真查找问题落实整改措施
2014/09/26 职场文书
入党宣誓大会后的感想
2015/08/10 职场文书
Oracle 多表查询基本语法实例
2022/04/18 Oracle
Python使用pyecharts控件绘制图表
2022/06/05 Python