node.js实现博客小爬虫的实例代码


Posted in Javascript onOctober 08, 2016

前言

爬虫,是一种自动获取网页内容的程序。是搜索引擎的重要组成部分,因此搜索引擎优化很大程度上就是针对爬虫而做出的优化。

这篇文章介绍的是利用node.js实现博客小爬虫,核心的注释我都标注好了,可以自行理解,只需修改url和按照要趴的博客内部dom构造改一下filterchapters和filterchapters1就行了!

下面话不多说,直接来看实例代码

var http=require('http');
var Promise=require('Bluebird');
var cheerio = require('cheerio');
var url='http://www.immaster.cn';//博客地址
function filterchapters1(html) {//解析文章链接
 var $ =cheerio.load(html);
 var post=$('.post');
 
 var content=[];
 post.each(function (item) {
 
 var postid=$(this).find('.tit').find('a').attr('href');
 
 content.push(postid);
 })
 return content;
}
function filterchapters(html) {//解析每个文章内的内容
 var $ =cheerio.load(html);
 var tit=$('.post .tit').find('a').text();
 var postid=$('.tit').find('a').attr('href');
 var commentnum=$('.comments-title').text();
 commentnum=commentnum.trim();
 // commentnum=commentnum.replace('\n','');
 var content={tit:tit,url:postid,commentnum:commentnum};
 return content;
}
function getid(url){//爬取首页文章链接
 return new Promise(function (resolve,reject) {
 http.get(url,function (res) {
 var html = '';
 res.on('data',function(data) {
 html+=data;
 });
 res.on('end',function () {
 var content=filterchapters1(html)
 resolve(content);
 
 })
}).on('error',function () {
 reject(e);
 console.log('抓取出错!')
 })
})
}
function getpageAsync(url) {//爬取单个页面内容
 return new Promise(function (resolve,reject) {
 console.log('正在爬取……'+url)
 http.get(url,function (res) {
 var html = '';
 res.on('data',function(data) {
 html+=data;
 });
 res.on('end',function () {
 resolve(html);
 
 })
 }).on('error',function () {
 reject(e);
 console.log('抓取出错!')
 })
 })
}
getid(url)
 .then(function(postid){
 return new Promise(function (resolve,reject) {
 var pageurls=[];
 postid.forEach(function (id) {
 pageurls.push(getpageAsync(id));
 })
 resolve(pageurls);
 })
 })
 .then(function(pageurls){
 return new Promise.all(pageurls);//让promise对象同时开始运行
 })
 .then(function (pages) {
 var coursesData=[];
 pages.forEach(function (html) {
 var courses=filterchapters(html);
 coursesData.push(courses);
 })
coursesData.forEach(function(v){
 console.log('标题:'+v.tit+"\n地址:"+v.url+"\n评论:"+v.commentnum)
 })
 })

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家学习或者使用node.js实现爬虫能有所帮助,如果有疑问大家可以留言交流。

Javascript 相关文章推荐
当鼠标移动到图片上时跟随鼠标显示放大的图片效果
Jun 06 Javascript
JS实现简单的Canvas画图实例
Jul 04 Javascript
jquery上传插件fineuploader上传文件使用方法(jquery图片上传插件)
Dec 05 Javascript
JQuery做的一个简单的点灯游戏分享
Jul 16 Javascript
javascript实现随时变化着的背景颜色
Apr 02 Javascript
JavaScript实现上下浮动的窗口效果代码
Oct 12 Javascript
jquery实现的V字形显示效果代码
Oct 27 Javascript
Vuejs第九篇之组件作用域及props数据传递实例详解
Sep 05 Javascript
jQuery阻止移动端遮罩层后页面滚动
Mar 15 Javascript
element-ui 设置菜单栏展开的方法
Aug 22 Javascript
AI小程序之语音听写来了,十分钟掌握百度大脑语音听写全攻略
Mar 13 Javascript
Postman环境变量全局变量使用方法详解
Aug 13 Javascript
阿里云ecs服务器中安装部署node.js的步骤
Oct 08 #Javascript
JavaScript“尽快失败”的原则实例详解
Oct 08 #Javascript
jQuery如何解决IE输入框不能输入的问题
Oct 08 #Javascript
微信小程序 canvas API详解及实例代码
Oct 08 #Javascript
微信小程序 animation API详解及实例代码
Oct 08 #Javascript
AngularJS实践之使用NgModelController进行数据绑定
Oct 08 #Javascript
Bootstrap Navbar Component实现响应式导航
Oct 08 #Javascript
You might like
重置版宣传动画
2020/04/09 魔兽争霸
Apache2 httpd.conf 中文版
2006/11/17 PHP
php字符串截取问题
2006/11/28 PHP
DedeCMS 核心类TypeLink.class.php摘要笔记
2010/04/07 PHP
Apache PHP MySql安装配置图文教程
2016/08/27 PHP
jquery 插件之仿“卓越亚马逊”首页弹出菜单效果
2008/12/25 Javascript
Google Map API更新实现用户自定义标注坐标
2009/07/29 Javascript
基于JQuery的抓取博客园首页RSS的代码
2011/12/01 Javascript
jQuery控制输入框只能输入数值的小例子
2013/03/20 Javascript
深入理解JavaScript系列(27):设计模式之建造者模式详解
2015/03/03 Javascript
JavaScript中exec函数用法实例分析
2015/06/08 Javascript
Bootstrap所支持的表单控件实例详解
2016/05/16 Javascript
javascript入门之数组[新手必看]
2016/11/21 Javascript
vue双向绑定的简单实现
2016/12/22 Javascript
jquery中关于bind()方法的使用技巧分享
2017/03/30 jQuery
原生js实现密码输入框值的显示隐藏
2017/07/17 Javascript
vuejs项目打包之后的首屏加载优化及打包之后出现的问题
2018/04/01 Javascript
angular 实现同步验证器跨字段验证的方法
2019/04/11 Javascript
vue自定义组件(通过Vue.use()来使用)即install的用法说明
2020/08/11 Javascript
Python的string模块中的Template类字符串模板用法
2016/06/27 Python
关于numpy中np.nonzero()函数用法的详解
2017/02/07 Python
windows系统下Python环境搭建教程
2017/03/28 Python
Python进程间通信之共享内存详解
2017/10/30 Python
在Python中输入一个以空格为间隔的数组方法
2018/11/13 Python
python try...finally...的实现方法
2020/11/25 Python
实例讲解CSS3中的box-flex弹性盒属性布局
2016/06/09 HTML / CSS
英国最大的电子产品和家电零售企业:Currys PC World
2016/09/24 全球购物
Fairyseason:为个人和批发商提供女装和配件
2017/03/01 全球购物
学校运动会开幕演讲稿
2014/01/04 职场文书
学生拾金不昧表扬信
2014/01/21 职场文书
竞选大队干部演讲稿
2014/09/11 职场文书
个人剖析材料及整改措施
2014/10/07 职场文书
父亲节活动总结
2015/02/12 职场文书
2015年出纳年终工作总结
2015/05/14 职场文书
庆祝教师节主持词
2015/07/06 职场文书
Hive常用日期格式转换语法
2022/06/25 数据库