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 相关文章推荐
Jquery调用webService远程访问出错的解决方法
May 21 Javascript
JS截取url中问号后面参数的值信息
Apr 29 Javascript
jquery实现textarea输入框限制字数的方法
Jan 15 Javascript
jQuery实现仿美橙互联两级导航菜单效果完整实例
Sep 17 Javascript
学习JavaScript设计模式(多态)
Nov 25 Javascript
基于jQuery实现以手风琴方式展开和折叠导航菜单
Jan 28 Javascript
图文详解Heap Sort堆排序算法及JavaScript的代码实现
May 04 Javascript
JavaScript中windows.open()、windows.close()方法详解
Jul 28 Javascript
vue.js选中动态绑定的radio的指定项
Jun 02 Javascript
微信JS-SDK实现微信会员卡功能(给用户微信卡包里发送会员卡)
Jul 25 Javascript
JS模拟浏览器实现全局搜索功能
Sep 11 Javascript
vue 表单输入框不支持focus及blur事件的解决方案
Nov 17 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记录日志的实现代码
2011/08/08 PHP
PHP直接修改表内容DataGrid功能实现代码
2015/09/24 PHP
PHP 中使用explode()函数切割字符串为数组的示例
2017/05/06 PHP
jquery+json 通用三级联动下拉列表
2010/04/19 Javascript
jquery动态增加text元素以及删除文本内容实例代码
2013/07/01 Javascript
jquery 绑定回车动作扑捉回车键触发的事件
2014/03/26 Javascript
javascript替换已有元素replaceChild()使用介绍
2014/04/03 Javascript
javascript操纵OGNL标签示例代码
2014/06/16 Javascript
js实现图片和链接文字同步切换特效的方法
2015/02/20 Javascript
jQuery使用fadeout实现元素渐隐效果的方法
2015/03/27 Javascript
Node.js配合node-http-proxy解决本地开发ajax跨域问题
2016/08/31 Javascript
使用jQuery实现鼠标点击左右按钮滑动切换
2017/08/04 jQuery
利用express启动一个server服务的方法
2017/09/17 Javascript
vue地区选择组件教程详解
2018/05/04 Javascript
20个最常见的jQuery面试问题及答案
2018/05/23 jQuery
jQuery 操作 HTML 元素和属性的方法
2018/11/12 jQuery
seajs和requirejs模块化简单案例分析
2019/08/26 Javascript
python 输出一个两行字符的变量
2009/02/05 Python
python的类变量和成员变量用法实例教程
2014/08/25 Python
python操作mysql代码总结
2018/06/01 Python
python读取一个目录下所有txt里面的内容方法
2018/06/23 Python
Python OpenCV处理图像之图像像素点操作
2018/07/10 Python
TensorFlow实现Logistic回归
2018/09/07 Python
详解python校验SQL脚本命名规则
2019/03/22 Python
python获取引用对象的个数方式
2019/12/20 Python
python中spy++的使用超详细教程
2021/01/29 Python
CSS3让登陆面板3D旋转起来
2016/05/03 HTML / CSS
毕业生求职找工作的自我评价范文
2013/11/27 职场文书
职工趣味运动会方案
2014/02/10 职场文书
小学教师评语大全
2014/04/23 职场文书
2014年大学生党员评议表自我评价
2014/09/20 职场文书
2014最新党员批评与自我批评材料
2014/09/24 职场文书
2015年银行工作总结范文
2015/04/01 职场文书
《迟到》教学反思
2016/02/24 职场文书
聘任书的格式及模板
2019/10/28 职场文书
导游词之杭州岳王庙
2019/11/13 职场文书