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 相关文章推荐
基于MooTools的很有创意的滚动条时钟动画
Nov 14 Javascript
JS编程小常识很有用
Nov 26 Javascript
Js 冒泡事件阻止实现代码
Jan 27 Javascript
Jquery 跨域访问 Lightswitch OData Service的方法
Sep 11 Javascript
在Mac OS下使用Node.js的简单教程
Jun 24 Javascript
基于javascript实现按圆形排列DIV元素(二)
Dec 02 Javascript
微信小程序 自己制作小组件实例详解
Dec 22 Javascript
详解vue 组件之间使用eventbus传值
Oct 25 Javascript
elementUi vue el-radio 监听选中变化的实例代码
Jun 28 Javascript
基于vue 实现表单中password输入的显示与隐藏功能
Jul 19 Javascript
JavaScript实现筛选数组
Mar 02 Javascript
Vue OpenLayer测距功能的实现
Apr 20 Vue.js
阿里云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
PHP运行模式的深入理解
2013/06/03 PHP
php中base64_decode与base64_encode加密解密函数实例
2014/11/24 PHP
浅谈PHP中Stream(流)
2015/06/08 PHP
php实现微信企业付款到个人零钱功能
2018/10/09 PHP
使用Git实现Laravel项目的自动化部署
2019/11/24 PHP
DHTML 中的绝对定位
2006/11/26 Javascript
jQuery 版元素拖拽原型代码
2011/04/25 Javascript
javascript中数组array及string的方法总结
2014/11/28 Javascript
js完美解决IE6不支持position:fixed的bug
2015/04/24 Javascript
js中javascript:void(0) 真正含义
2020/11/05 Javascript
JavaScript 数组中最大最小值
2016/06/05 Javascript
jQuery文字提示与图片提示效果实现方法
2016/07/04 Javascript
原生js实现返回顶部缓冲效果
2017/01/18 Javascript
Vue.js事件处理器与表单控件绑定详解
2017/03/20 Javascript
js实现input密码框显示/隐藏功能
2020/09/10 Javascript
详解element-ui中el-select的默认选择项问题
2019/08/02 Javascript
详解vue 命名视图
2019/08/14 Javascript
vue-loader中引入模板预处理器的实现
2019/09/04 Javascript
vue自定义指令和动态路由实现权限控制
2020/08/28 Javascript
在Python下使用Txt2Html实现网页过滤代理的教程
2015/04/11 Python
Python实现计算两个时间之间相差天数的方法
2017/05/10 Python
Python全排列操作实例分析
2018/07/24 Python
Python函数any()和all()的用法及区别介绍
2018/09/14 Python
在ubuntu16.04中将python3设置为默认的命令写法
2018/10/31 Python
在pycharm上mongodb配置及可视化设置方法
2018/11/30 Python
解决导入django_filters不成功问题No module named 'django_filter'
2020/07/15 Python
Python中的With语句的使用及原理
2020/07/29 Python
Django如何批量创建Model
2020/09/01 Python
python基于win32api实现键盘输入
2020/12/09 Python
经验丰富大学生村干部自我鉴定
2014/01/22 职场文书
青春励志演讲稿
2014/04/29 职场文书
党支部书记四风问题整改措施
2014/09/24 职场文书
领导班子作风建设剖析材料
2014/10/11 职场文书
2014年残疾人工作总结
2014/12/06 职场文书
2015年世界环境日活动总结
2015/02/11 职场文书
大学迎新生欢迎词
2015/09/29 职场文书