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 相关文章推荐
js 实现打印网页中定义的部分内容的代码
Apr 01 Javascript
基于jquery的关于动态创建DOM元素的问题
Dec 24 Javascript
JavaScript简单实现鼠标拖动选择功能
Mar 06 Javascript
JavaScript编写连连看小游戏
Jul 07 Javascript
jQuery实现向下滑出的二级菜单效果实例
Aug 22 Javascript
Vue.js实现实例搜索应用功能详细代码
Aug 24 Javascript
Vue+webpack项目配置便于维护的目录结构教程详解
Oct 14 Javascript
electron中使用bootstrap的示例代码
Nov 06 Javascript
Vue最新防抖方案(必看篇)
Oct 30 Javascript
详解Vue后台管理系统开发日常总结(组件PageHeader)
Nov 01 Javascript
JavaScript中的函数申明、函数表达式、箭头函数
Dec 06 Javascript
详解vue 组件
Jun 11 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通过array_push()函数添加多个变量到数组末尾的方法
2015/03/18 PHP
如何使用php实现评委评分器
2015/07/31 PHP
如何使用微信公众平台开发模式实现多客服
2016/01/06 PHP
PHP微信刮刮卡 附微信接口
2016/07/22 PHP
CI框架实现优化文件上传及多文件上传的方法
2017/01/04 PHP
PHP中的正则表达式实例详解
2017/04/25 PHP
showModelessDialog()使用详解
2006/09/21 Javascript
JQueryEasyUI datagrid框架的基本使用
2013/04/08 Javascript
跟我学习javascript的基本类型和引用类型
2015/11/16 Javascript
jQuery实现调整表格单列顺序完整实例
2016/06/20 Javascript
深入理解jQuery()方法的构建原理
2016/12/05 Javascript
微信小程序button组件使用详解
2018/01/31 Javascript
vue slots 组件的组合/分发实例
2018/09/06 Javascript
Nodejs中获取当前函数被调用的行数及文件名详解
2018/12/12 NodeJs
python实现mysql的单引号字符串过滤方法
2015/11/14 Python
Python工厂函数用法实例分析
2018/05/14 Python
Python3非对称加密算法RSA实例详解
2018/12/06 Python
对python读取zip压缩文件里面的csv数据实例详解
2019/02/08 Python
详解Python读取yaml文件多层菜单
2019/03/23 Python
彻底理解Python中的yield关键字
2019/04/01 Python
利用python实现PSO算法优化二元函数
2019/11/13 Python
python 非线性规划方式(scipy.optimize.minimize)
2020/02/11 Python
python字典和json.dumps()的遇到的坑分析
2020/03/11 Python
Python如何实现远程方法调用
2020/08/07 Python
CSS3对图片照片进行边缘模糊处理的实现
2018/08/08 HTML / CSS
Rossignol金鸡美国官网:始于1907年法国百年雪具品牌
2019/03/06 全球购物
JDO的含义
2012/11/17 面试题
Ajax实现页面无刷新留言效果
2021/03/24 Javascript
物业管理应届生求职信
2013/10/28 职场文书
秋季运动会加油稿200字
2014/01/11 职场文书
大学校园生活自我鉴定
2014/01/13 职场文书
临床医师个人自我评价
2014/04/06 职场文书
我的大学四年规划书范文2014
2014/09/26 职场文书
党支部2014年度工作总结
2014/12/04 职场文书
城南旧事电影观后感
2015/06/16 职场文书
Java 在线考试云平台的实现
2021/11/23 Java/Android