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 validate.js表单验证的基本用法入门
May 13 Javascript
JS继承--原型链继承和类式继承
Apr 08 Javascript
详解angular中如何监控dom渲染完毕
Jan 03 Javascript
jQuery EasyUI 为Combo,Combobox添加清除值功能的实例
Apr 13 jQuery
bootstrap响应式表格实例详解
May 15 Javascript
AngularJS点击添加样式、点击变色设置的实例代码
Jul 27 Javascript
微信小程序实现点击按钮修改字体颜色功能【附demo源码下载】
Dec 05 Javascript
jQuery+koa2实现简单的Ajax请求的示例
Mar 06 jQuery
JS删除String里某个字符的方法
Jan 06 Javascript
微信小程序 函数防抖 解决重复点击消耗性能问题实现代码
Sep 12 Javascript
在项目vue中使用echarts的操作步骤
Sep 07 Javascript
EXTJS7实现点击拖拉选择文本
Dec 17 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选择排序法实现数组排序实例分析
2015/02/16 PHP
十大使用PHP框架的理由
2015/09/26 PHP
PHP验证终端类型是否为手机的简单实例
2017/02/07 PHP
总结PHP内存释放以及垃圾回收
2018/03/29 PHP
php使用array_chunk函数将一个数组分割成多个数组
2018/12/05 PHP
jQuery结合PHP+MySQL实现二级联动下拉列表[实例]
2011/11/15 Javascript
nodejs爬虫抓取数据之编码问题
2015/07/03 NodeJs
jquery实现表单输入时提示文字滑动向上效果
2015/08/10 Javascript
理解和运用JavaScript的闭包机制
2015/08/13 Javascript
jQuery实现动态文字搜索功能
2017/01/05 Javascript
vue-cli webpack 引入swiper的操作方法
2018/09/15 Javascript
微信小程序工具函数封装
2019/10/28 Javascript
JavaScript代码模拟鼠标自动点击事件示例
2020/08/07 Javascript
OpenLayer学习之自定义测量控件
2020/09/28 Javascript
JS+JQuery实现无缝连接轮播图
2020/12/30 jQuery
[04:59]2018DOTA2亚洲邀请赛 4.7 Mineski夺冠时刻
2018/04/09 DOTA
python实现监控linux性能及进程消耗性能的方法
2014/07/25 Python
python排序方法实例分析
2015/04/30 Python
python pandas中对Series数据进行轴向连接的实例
2018/06/08 Python
Python OpenCV处理图像之图像像素点操作
2018/07/10 Python
Python双链表原理与实现方法详解
2020/02/22 Python
Python基于pyecharts实现关联图绘制
2020/03/27 Python
Jupyter Notebook折叠输出的内容实例
2020/04/22 Python
Python自动登录QQ的实现示例
2020/08/28 Python
python向企业微信发送文字和图片消息的示例
2020/09/28 Python
使用HTML5和CSS3表单验证功能
2017/05/05 HTML / CSS
美国玛丽莎收藏奢华时尚商店:Marissa Collections
2016/11/21 全球购物
西班牙品牌鞋子、服装和配饰在线商店:Esdemarca
2021/02/17 全球购物
什么是虚拟内存?虚拟内存有什么优势?
2016/02/09 面试题
校园学雷锋活动月总结
2014/03/09 职场文书
动物科学专业求职信
2014/07/27 职场文书
大学生创业计划书怎么写
2014/09/15 职场文书
感谢信范文大全
2015/01/23 职场文书
高中社区服务活动报告
2015/02/05 职场文书
2015年小学校长工作总结
2015/05/19 职场文书
Windows11 Insider Preview Build 25206今日发布 更新内容汇总
2022/09/23 数码科技