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 实现模拟form表单上传文件
Jul 14 NodeJs
基于NodeJS的前后端分离的思考与实践(三)轻量级的接口配置建模框架
Sep 26 NodeJs
nodeJS代码实现计算交社保是否合适
Mar 09 NodeJs
Nodejs学习笔记之入门篇
Apr 16 NodeJs
浅谈NodeJS中require路径问题
May 07 NodeJs
Nodejs express框架一个工程中同时使用ejs模版和jade模版
Dec 28 NodeJs
基于nodejs 的多页面爬虫实例代码
May 31 NodeJs
nodejs调取微信收货地址的方法
Dec 20 NodeJs
nodejs搭建本地服务器轻松解决跨域问题
Mar 21 NodeJs
Nodejs Express 通过log4js写日志到Logstash(ELK)
Aug 30 NodeJs
CentOS7中源码编译安装NodeJS的完整步骤
Oct 13 NodeJs
Nodejs文件上传、监听上传进度的代码
Mar 27 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
推荐几部必看的DC动画电影
2020/03/03 欧美动漫
php addslashes和mysql_real_escape_string
2010/01/24 PHP
php实现购物车产品删除功能(2)
2020/07/23 PHP
JS实现距离上次刷新已过多少秒示例
2014/05/23 Javascript
Javascript快速排序算法详解
2014/12/03 Javascript
微信小程序之小豆瓣图书实例
2016/11/30 Javascript
深入掌握 react的 setState的工作机制
2017/09/27 Javascript
浅谈Vue SPA 首屏加载优化实践
2017/12/15 Javascript
JavaScript使用类似break机制中断forEach循环的方法
2018/11/13 Javascript
微信小程序 云开发模糊查询实现解析
2019/09/02 Javascript
vue组件中传值EventBus的使用及注意事项说明
2020/11/16 Javascript
[04:20]DOTA2-DPC中国联赛 正赛 VG vs LBZS 选手采访 1月19日
2021/03/11 DOTA
在Python中使用mongoengine操作MongoDB教程
2015/04/24 Python
python获取网页中所有图片并筛选指定分辨率的方法
2018/03/31 Python
python3结合openpyxl库实现excel操作的实例代码
2018/09/11 Python
Windows下安装Scrapy
2018/10/17 Python
pytorch-神经网络拟合曲线实例
2020/01/15 Python
python turtle工具绘制四叶草的实例分享
2020/02/14 Python
Python 中由 yield 实现异步操作
2020/05/04 Python
python中四舍五入的正确打开方式
2021/01/18 Python
CSS3条纹背景制作的实战攻略
2016/05/31 HTML / CSS
非凡女性奢华谦虚风格:The Modist
2017/10/28 全球购物
Prototype中如何为一个元素添加一个方法
2014/12/08 面试题
保安的辞职报告怎么写
2014/01/20 职场文书
医院学雷锋活动策划方案
2014/02/15 职场文书
五年后的职业生涯规划
2014/03/04 职场文书
党员干部廉洁承诺书
2014/05/28 职场文书
物业管理专业求职信
2014/06/11 职场文书
小学生国庆演讲稿
2014/09/05 职场文书
2014年社区综治工作总结
2014/11/17 职场文书
关于拾金不昧的感谢信(五篇)
2019/10/18 职场文书
redis配置文件中常用配置详解
2021/04/14 Redis
详解Java实现数据结构之并查集
2021/06/23 Java/Android
python Django框架快速入门教程(后台管理)
2021/07/21 Python
什么是Python装饰器?如何定义和使用?
2022/04/11 Python
Fluentd搭建日志收集服务
2022/09/23 Servers