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 相关文章推荐
checkbox全选/取消全选以及checkbox遍历jQuery实现代码
Dec 02 Javascript
js简单实现表单中点击按钮动态增加输入框数量的方法
Aug 18 Javascript
jQuery选择器总结之常用元素查找方法
Aug 04 Javascript
利用策略模式与装饰模式扩展JavaScript表单验证功能
Feb 14 Javascript
Vue.js 2.0中select级联下拉框实例
Mar 06 Javascript
jQuery动态添加li标签并添加属性和绑定事件方法
Feb 24 jQuery
JS实现监控微信小程序的原理
Jun 15 Javascript
VUE实现密码验证与提示功能
Oct 18 Javascript
原生js实现日期选择插件
May 21 Javascript
ES6 async、await的基本使用方法示例
Jun 06 Javascript
js实现省级联动(数据结构优化)
Jul 17 Javascript
解决vue打包 npm run build-test突然不动了的问题
Nov 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
在smarty模板中使用PHP函数的方法
2011/04/23 PHP
基于session_unset与session_destroy的区别详解
2013/06/03 PHP
用JavaScript页面不刷新时全选择,全删除(GridView)
2009/04/14 Javascript
JavaScript 提升运行速度之循环篇 译文
2009/08/15 Javascript
JS获取节点的兄弟,父级,子级元素的方法
2014/01/09 Javascript
JavaScript中原型和原型链详解
2015/02/11 Javascript
JS动画效果打开、关闭层的实现方法
2015/05/09 Javascript
javascript元素动态创建实现方法
2015/05/13 Javascript
js+HTML5基于过滤器从摄像头中捕获视频的方法
2015/06/16 Javascript
使用vue.js编写蓝色拼图小游戏
2017/03/17 Javascript
微信浏览器禁止页面下拉查看网址实例详解
2017/06/28 Javascript
Vue中的字符串模板的使用
2018/05/17 Javascript
vue.js 实现输入框动态添加功能
2018/06/25 Javascript
详解mpvue开发小程序小总结
2018/07/25 Javascript
详解vue-router导航守卫
2019/01/19 Javascript
js验证账户名是否重复
2020/05/26 Javascript
工作中常用js功能汇总
2020/11/07 Javascript
[01:38]完美世界高校联赛决赛花絮
2018/12/02 DOTA
[32:39]完美世界DOTA2联赛循环赛 Forest vs Inki BO2第一场 11.04
2020/11/04 DOTA
用Python实现服务器中只重载被修改的进程的方法
2015/04/30 Python
Django框架中处理URLconf中特定的URL的方法
2015/07/20 Python
python字典值排序并取出前n个key值的方法
2018/10/17 Python
解决python ogr shp字段写入中文乱码的问题
2018/12/31 Python
基于django channel实现websocket的聊天室的方法示例
2019/04/11 Python
django如何自己创建一个中间件
2019/07/24 Python
python使用sklearn实现决策树的方法示例
2019/09/12 Python
HTML5 DeviceOrientation实现手机网站摇一摇功能代码实例
2015/04/24 HTML / CSS
Html5大文件断点续传实现方法
2015/12/05 HTML / CSS
新西兰杂志订阅:isubscribe
2019/08/26 全球购物
华硕新加坡官方网上商店:ASUS Singapore
2020/07/09 全球购物
this关键字的作用
2016/01/30 面试题
党员年终民主评议的自我评价
2013/11/05 职场文书
工作失职检讨书范文
2014/01/16 职场文书
软件工程毕业生自荐信
2014/07/04 职场文书
好的旅游活动方案
2014/08/19 职场文书
Go遍历struct,map,slice的实现
2021/06/13 Golang