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客户端解决方案 缓存提供程序
Jul 14 Javascript
js onkeypress与onkeydown 事件区别详细说明
Dec 13 Javascript
鼠标经过tr时,改变tr当前背景颜色
Jan 13 Javascript
Javascript的严格模式strict mode详细介绍
Jun 06 Javascript
javascript中Date format(js日期格式化)方法小结
Dec 17 Javascript
jQuery ajax全局函数处理session过期后的ajax跳转问题
Jun 03 Javascript
Node.js读取文件内容示例
Mar 07 Javascript
vue-star评星组件开发实例
Mar 01 Javascript
Vue2.0结合webuploader实现文件分片上传功能
Mar 09 Javascript
浅谈VueJS SSR 后端绘制内存泄漏的相关解决经验
Dec 20 Javascript
Vue框架TypeScript装饰器使用指南小结
Feb 18 Javascript
解决vue net :ERR_CONNECTION_REFUSED报错问题
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
Linux fgetcsv取得的数组元素为空字符串的解决方法
2011/11/25 PHP
说说PHP的autoLoad自动加载机制
2012/09/27 PHP
PHP常用编译参数中文说明
2014/09/27 PHP
Laravel中Trait的用法实例详解
2016/03/16 PHP
PHP迭代器和迭代的实现与使用方法分析
2018/04/19 PHP
懒就要懒到底——鼠标自动点击(含时间判断)
2007/02/20 Javascript
让你的博客飘雪花超出屏幕依然看得见
2013/01/04 Javascript
jquery简单的拖动效果实现原理及示例
2013/07/26 Javascript
Javascript 颜色渐变效果的实现代码
2013/10/01 Javascript
JavaScript使用DeviceOne开发实战(四)仿优酷视频应用
2015/12/02 Javascript
举例讲解如何判断JavaScript中对象的类型
2016/04/22 Javascript
JavaScript代码性能优化总结(推荐)
2016/05/16 Javascript
vue复合组件实现注册表单功能
2017/11/06 Javascript
浅谈Vue路由快照实现思路及其问题
2018/06/07 Javascript
vue使用keep-alive保持滚动条位置的实现方法
2019/04/09 Javascript
微信小程序基于canvas渐变实现的彩虹效果示例
2019/05/03 Javascript
微信小程序自定义纯净模态框(弹出框)的实例代码
2020/03/09 Javascript
Vue——前端生成二维码的示例
2020/12/19 Vue.js
[01:00]一分钟回顾2018DOTA2亚洲邀请赛现场活动
2018/04/07 DOTA
web.py在SAE中的Session问题解决方法(使用mysql存储)
2015/06/24 Python
python实现发送邮件功能
2017/07/22 Python
英国优质家居用品网上品牌:URBANARA
2018/06/01 全球购物
大学生四年生活自我鉴定
2013/11/21 职场文书
出国考察邀请函
2014/01/21 职场文书
大学生自我鉴定评语
2014/01/27 职场文书
2014年社区植树节活动方案
2014/02/28 职场文书
酒店节能减排方案
2014/05/26 职场文书
英语课外活动总结
2014/08/27 职场文书
婚礼证婚人演讲稿
2014/09/13 职场文书
励志广播稿300字(5篇)
2014/09/15 职场文书
村长反四风问题个人对照检查材料
2014/09/21 职场文书
九寨沟导游词
2015/02/02 职场文书
社交电商模式的兴起:这些新的商机千万别错过
2019/07/26 职场文书
CSS3鼠标悬浮过渡缩放效果
2021/04/17 HTML / CSS
HTML+VUE分页实现炫酷物联网大屏功能
2021/05/27 Vue.js
node快速搭建后台的实现步骤
2022/02/18 NodeJs