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 引发两次$(document.ready)事件
Jan 15 Javascript
JavaScript高级程序设计(第3版)学习笔记9 js函数(下)
Oct 11 Javascript
JS 加入收藏夹的代码(主流浏览器通用)
May 13 Javascript
JavaScript中判断对象类型的几种方法总结
Nov 11 Javascript
javascript静态页面传值的三种方法分享
Nov 12 Javascript
JavaSript中变量的作用域闭包的深入理解
May 12 Javascript
jQuery使用before()和after()在元素前后添加内容的方法
Mar 26 Javascript
Vue父子组件双向绑定传值的实现方法
Jul 31 Javascript
VuePress 静态网站生成方法步骤
Feb 14 Javascript
Vue 实现复制功能,不需要任何结构内容直接复制方式
Nov 09 Javascript
javascript绘制简单钟表效果
Apr 07 Javascript
npm全局环境变量配置详解
Dec 15 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代码优化及php相关问题总结
2006/10/09 PHP
PHP无限分类(树形类)的深入分析
2013/06/02 PHP
PHP实现事件机制的方法
2015/07/10 PHP
PHP创建文件,并向文件中写入数据,覆盖,追加的实现代码
2016/03/25 PHP
onkeydown事件解决按回车键直接提交数据的需求
2013/04/11 Javascript
javascript删除option选项的多种方法总结
2013/11/22 Javascript
js构造函数、索引数组和属性的实现方式和使用
2014/11/16 Javascript
AngularJS初始化过程分析(引导程序)
2014/12/06 Javascript
使用React实现轮播效果组件示例代码
2016/09/05 Javascript
Angular.js去除页面中显示的空行方法示例
2017/03/30 Javascript
JavaScript 中的 this 工作原理
2018/06/20 Javascript
详解小程序不同页面之间通讯的解决方案
2018/11/23 Javascript
JS中的一些常用的函数式编程术语
2019/06/15 Javascript
node.js express框架简介与实现
2019/07/23 Javascript
[58:12]Ti4第二日主赛事败者组 LGD vs iG 3
2014/07/21 DOTA
使用go和python递归删除.ds store文件的方法
2014/01/22 Python
Python比较文件夹比另一同名文件夹多出的文件并复制出来的方法
2015/03/05 Python
pytorch模型存储的2种实现方法
2020/02/14 Python
python3 中使用urllib问题以及urllib详解
2020/08/03 Python
python实现银行账户系统
2021/02/22 Python
CSS3样式linear-gradient的使用实例
2017/01/16 HTML / CSS
AmazeUI折叠式卡片布局,整合内容列表、表格组件实现
2020/08/20 HTML / CSS
网购亚洲时装、美容产品和生活百货:YesStyle
2016/09/15 全球购物
智能电子秤、手表和健康监测仪:Withings(之前为诺基亚健康)
2018/10/30 全球购物
TUMI新加坡官网:国际领先的商旅箱包品牌
2019/01/12 全球购物
adidas菲律宾官网:adidas PH
2020/02/07 全球购物
采购主管工作职责
2013/12/12 职场文书
全国税务系统先进集体事迹材料
2014/05/19 职场文书
关爱残疾人演讲稿
2014/05/24 职场文书
九一八事变纪念日演讲稿
2014/09/14 职场文书
青年教师个人总结
2015/02/11 职场文书
情人节单身感言
2015/08/03 职场文书
八年级语文教学反思
2016/03/03 职场文书
Pytorch实现图像识别之数字识别(附详细注释)
2021/05/11 Python
eclipse创建项目没有dynamic web的解决方法
2021/06/24 Java/Android
在CSS中使用when/else的方法
2022/01/18 HTML / CSS