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 相关文章推荐
javascript import css实例代码
Jul 18 Javascript
Javascript 设计模式(二) 闭包
May 26 Javascript
js随机颜色代码的多种实现方式
Apr 23 Javascript
jQuery插件 selectToSelect使用方法
Oct 02 Javascript
IE6 hack for js 集锦
Sep 23 Javascript
javascript实现博客园页面右下角返回顶部按钮
Feb 22 Javascript
jQuery实现文本展开收缩特效
Jun 03 Javascript
基于js 字符串indexof与search方法的区别(详解)
Dec 04 Javascript
layui的数据表格+springmvc实现搜索功能的例子
Sep 28 Javascript
js实现提交前对列表数据的增删改查
Jan 16 Javascript
使用Vue 自定义文件选择器组件的实例代码
Mar 04 Javascript
Vue+tracking.js 实现前端人脸检测功能
Apr 16 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接口中interface存在的意义
2013/06/27 PHP
深入Nginx + PHP 缓存详解
2013/07/11 PHP
Smarty模板学习笔记之Smarty简介
2014/05/20 PHP
Symfony2联合查询实现方法
2016/03/18 PHP
鼠标焦点离开文本框时验证的js代码
2013/07/19 Javascript
JavaScript中提前声明变量或函数例子
2014/11/12 Javascript
基于jquery实现无限级树形菜单
2016/03/22 Javascript
jQuery实现的tab标签切换效果示例
2016/09/05 Javascript
JS短信验证码倒计时功能的实现(没有验证码,只有倒计时)
2016/10/27 Javascript
canvas绘制七巧板
2017/02/03 Javascript
JS实现的tab切换选项卡效果示例
2017/02/28 Javascript
angular+bootstrap的双向数据绑定实例
2017/03/03 Javascript
nodejs个人博客开发第六步 数据分页
2017/04/12 NodeJs
jQuery中extend函数简单用法示例
2017/10/11 jQuery
vue中v-model动态生成的实例详解
2017/10/27 Javascript
vue项目中使用vue-i18n报错的解决方法
2019/01/13 Javascript
vue+element创建动态的form表单及动态生成表格的行和列
2019/05/20 Javascript
javascript 模块依赖管理的本质深入详解
2020/04/30 Javascript
JS实现audio音频剪裁剪切复制播放与上传(步骤详解)
2020/07/28 Javascript
Node.JS如何实现JWT原理
2020/09/18 Javascript
实例Python处理XML文件的方法
2015/08/31 Python
Python字符串拼接、截取及替换方法总结分析
2016/04/13 Python
Python字符串和字典相关操作的实例详解
2017/09/23 Python
python通过配置文件共享全局变量的实例
2019/01/11 Python
在Python 中实现图片加框和加字的方法
2019/01/26 Python
Django MEDIA的配置及用法详解
2019/07/25 Python
Python OpenCV图像指定区域裁剪的实现
2019/10/30 Python
Django def clean()函数对表单中的数据进行验证操作
2020/07/09 Python
HTML5 Web Database 数据库的SQL语句的使用方法
2012/12/09 HTML / CSS
内部类的定义、种类以及优点
2013/10/16 面试题
《听鱼说话》教学反思
2014/02/15 职场文书
无子女夫妻离婚协议书(4篇)
2014/10/20 职场文书
优秀党员申报材料
2014/12/18 职场文书
拉贝日记观后感
2015/06/05 职场文书
入党转正申请书范文
2019/05/20 职场文书
Java多条件判断场景中规则执行器的设计
2021/06/26 Java/Android