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 相关文章推荐
用 Javascript 验证表单(form)中的单选(radio)值
Sep 08 Javascript
JS 树形递归实例代码
May 18 Javascript
理解JSON:3分钟课程
Oct 28 Javascript
jQuery中on()方法用法实例
Jan 19 Javascript
javascript实现随机显示星星特效
Jan 28 Javascript
仅9张思维导图帮你轻松学习Javascript 就这么简单
Jun 01 Javascript
javascript中的 object 和 function小结
Aug 14 Javascript
微信小程序前端源码逻辑和工作流
Sep 25 Javascript
原生JS实现九宫格抽奖效果
Apr 01 Javascript
vue todo-list组件发布到npm上的方法
Apr 04 Javascript
JavaScript格式化json和xml的方法示例
Jan 22 Javascript
JS数组扁平化、去重、排序操作实例详解
Feb 24 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
php实现留言板功能(会话控制)
2017/05/23 PHP
Mac系统完美安装PHP7详细教程
2017/06/06 PHP
用js解决数字不能换行问题
2010/08/10 Javascript
IE6下通过a标签点击切换图片的问题
2010/11/14 Javascript
基于jQuery的history历史记录插件
2010/12/11 Javascript
js函数setTimeout延迟执行的简单介绍
2013/07/17 Javascript
js判断为空Null与字符串为空简写方法
2014/02/24 Javascript
Three.js快速入门教程
2016/09/09 Javascript
javascript数组对象常用api函数小结(连接,插入,删除,反转,排序等)
2016/09/20 Javascript
JavaScript实现图片无缝滚动效果
2017/07/07 Javascript
vue loadmore组件上拉加载更多功能示例代码
2017/07/19 Javascript
node.js多个异步过程中判断执行是否完成的解决方案
2017/12/10 Javascript
使用D3.js创建物流地图的示例代码
2018/01/27 Javascript
快速解决vue在ios端下点击响应延时的问题
2018/08/27 Javascript
解决vue axios的封装 请求状态的错误提示问题
2018/09/25 Javascript
JS数组属性去重并校验重复数据
2020/01/10 Javascript
Vue Object 的变化侦测实现代码
2020/04/15 Javascript
vue中的循环对象属性和属性值用法
2020/09/04 Javascript
[44:10]2018DOTA2亚洲邀请赛 4.5 淘汰赛 EG vs VP 第一场
2018/04/06 DOTA
[54:24]Optic vs TNC 2018国际邀请赛小组赛BO2 第二场
2018/08/18 DOTA
利用Python的Twisted框架实现webshell密码扫描器的教程
2015/04/16 Python
使用Python压缩和解压缩zip文件的教程
2015/05/06 Python
初步讲解Python中的元组概念
2015/05/21 Python
Python基于win32ui模块创建弹出式菜单示例
2018/05/09 Python
python模拟菜刀反弹shell绕过限制【推荐】
2019/06/25 Python
python中提高pip install速度
2020/02/14 Python
医学院学生求职简历的自我评价
2013/10/24 职场文书
入党积极分子思想汇报
2014/01/02 职场文书
大学生2014全国两会学习心得体会
2014/03/10 职场文书
亮化工程实施方案
2014/03/17 职场文书
团日活动总结书格式
2014/05/08 职场文书
2014党的群众路线教育实践活动学习心得体会
2014/10/31 职场文书
2014年车间主任工作总结
2014/12/10 职场文书
2015年护士节慰问信
2015/03/23 职场文书
党支部对转正的意见
2015/06/02 职场文书
PostgreSQL13基于流复制搭建后备服务器的方法
2022/01/18 PostgreSQL