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 EasyUI API 中文文档 - MenuButton菜单按钮使用介绍
Oct 06 Javascript
node.js中的http.request方法使用说明
Dec 14 Javascript
javascript框架设计之框架分类及主要功能
Jun 23 Javascript
妙用Bootstrap的 popover插件实现校验表单提示功能
Aug 29 Javascript
Javascript json object 与string 相互转换的简单实现
Sep 27 Javascript
BootstrapValidator超详细教程(推荐)
Dec 07 Javascript
canvas知识总结
Jan 25 Javascript
js时间戳和c#时间戳互转方法(推荐)
Feb 15 Javascript
jQuery+PHP+Mysql实现抽奖程序
Apr 12 jQuery
AngularJS实现的自定义过滤器简单示例
Feb 02 Javascript
vuex 动态注册方法 registerModule的实现
Jul 03 Javascript
VSCode launch.json配置详细教程
Jun 18 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语法速查表
2007/01/02 PHP
Excel数据导入Mysql数据库的实现代码
2008/06/05 PHP
如何突破PHP程序员的技术瓶颈分析
2011/07/17 PHP
PHP动态柱状图实现方法
2015/03/30 PHP
关于PHP通用返回值设置方法
2017/03/31 PHP
thinkPHP实现的省市区三级联动功能示例
2017/05/05 PHP
PHP利用百度ai实现文本和图片审核
2019/05/08 PHP
javaScript复制功能调用实现方案
2012/12/13 Javascript
自定义函数实现IE7与IE8不兼容js中trim函数的问题
2015/02/03 Javascript
Javascript中使用parseInt函数需要注意的问题
2015/04/02 Javascript
Vue.js组件tree实现无限级树形菜单
2016/12/02 Javascript
xmlplus组件设计系列之列表(4)
2017/04/26 Javascript
JavaScript内置对象之Array的使用小结
2020/05/12 Javascript
基于vue的video播放器的实现示例
2021/02/19 Vue.js
浅述python中argsort()函数的实例用法
2017/03/30 Python
python实现SOM算法
2018/02/23 Python
关于Tensorflow中的tf.train.batch函数的使用
2018/04/24 Python
python实现名片管理系统项目
2019/04/26 Python
django admin 添加自定义链接方式
2020/03/11 Python
PageFactory设计模式基于python实现
2020/04/14 Python
Python实现CAN报文转换工具教程
2020/05/05 Python
什么是Python中的匿名函数
2020/06/02 Python
Python 捕获代码中所有异常的方法
2020/08/03 Python
C++和python实现阿姆斯特朗数字查找实例代码
2020/12/07 Python
Luxplus瑞典:香水和美容护理折扣
2018/01/28 全球购物
同事打架检讨书
2014/02/04 职场文书
党员违纪检讨书
2014/02/18 职场文书
护士岗前培训自我评鉴
2014/02/28 职场文书
微电影大赛策划方案
2014/06/05 职场文书
小学生常见病防治方案
2014/06/06 职场文书
机关副主任个人四风问题整改措施
2014/09/26 职场文书
卫校毕业生自我鉴定
2014/09/28 职场文书
2015年度环卫处工作总结
2015/07/24 职场文书
车辆管理制度范本
2015/08/05 职场文书
浅谈Python从全局与局部变量到装饰器的相关知识
2021/06/21 Python
Python IO文件管理的具体使用
2022/03/20 Python