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基于jQuery的表格悬停变色/恢复,表格点击变色/恢复,点击行选Checkbox
Aug 05 Javascript
cookie丢失问题(认证失效) Authentication (用户验证信息)也会丢失
Jun 04 Javascript
Prototype String对象 学习
Jul 19 Javascript
javascript使用onclick事件改变选中行的颜色
Dec 30 Javascript
jquery缓动swing liner控制动画过程不同时刻的速度
May 29 Javascript
20条学习javascript的编程规范的建议
Nov 28 Javascript
jQuery插件EasyUI校验规则 validatebox验证框
Nov 29 Javascript
Vue异步组件使用详解
Apr 08 Javascript
Vue路由history模式解决404问题的几种方法
Sep 29 Javascript
简述Vue中容易被忽视的知识点
Dec 09 Javascript
ElementUI中el-tree节点的操作的实现
Feb 27 Javascript
jQuery+ajax实现文件上传功能
Dec 22 jQuery
阿里云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 gbk环境下json_dencode传送来的汉字
2012/11/13 PHP
具有时效性的php加密解密函数代码
2013/06/19 PHP
php共享内存段示例分享
2014/01/20 PHP
使用Huagepage和PGO来提升PHP7的执行性能
2015/11/30 PHP
PHP数组游标实现对数组的各种操作详解
2016/01/26 PHP
Symfony2在Nginx下的配置方法图文教程
2016/02/04 PHP
PHP 命名空间和自动加载原理与用法实例分析
2020/04/29 PHP
论坛里点击别人帖子下面的回复,回复标题变成“回复 24# 的帖子”
2009/06/14 Javascript
jQuery-ui中自动完成实现方法
2010/06/10 Javascript
node.js [superAgent] 请求使用示例
2015/03/13 Javascript
Javascript中String的常用方法实例分析
2015/06/13 Javascript
JS控制按钮10秒钟后可用的方法
2015/12/22 Javascript
很全面的JavaScript常用功能汇总集合
2016/01/22 Javascript
Jquery AJAX POST与GET之间的区别详细介绍
2016/10/17 Javascript
AngularJS深入探讨scope,继承结构,事件系统和生命周期
2016/11/02 Javascript
详解Angualr 组件间通信
2017/01/21 Javascript
微信小程序实现传参数的几种方法示例
2018/01/10 Javascript
微信小程序实现滴滴导航tab切换效果
2018/07/24 Javascript
NodeJS使用Range请求实现下载功能的方法示例
2018/10/12 NodeJs
highCharts提示框中显示当前时间的方法
2019/01/18 Javascript
微信小程序Flex布局用法深入浅出分析
2019/04/25 Javascript
JQuery animate动画应用示例
2019/05/14 jQuery
JS数组的高级使用方法示例小结
2020/03/14 Javascript
[48:32]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 LGD vs VG
2018/04/01 DOTA
Python中内置数据类型list,tuple,dict,set的区别和用法
2015/12/14 Python
Python使用matplotlib实现基础绘图功能示例
2018/07/03 Python
django-allauth入门学习和使用详解
2019/07/03 Python
Python爬虫爬取Bilibili弹幕过程解析
2019/10/10 Python
python文件及目录操作代码汇总
2020/07/08 Python
让你相见恨晚的十个Python骚操作
2020/11/18 Python
python生成word合同的实例方法
2021/01/12 Python
Html5新标签解释及用法
2012/02/17 HTML / CSS
美国一家主营日韩美妆护肤品的在线商店:iMomoko
2016/09/11 全球购物
Fossil德国官网:化石手表、手袋、珠宝及配件
2019/12/07 全球购物
网络营销计划书
2015/01/17 职场文书
幸福来敲门观后感
2015/06/04 职场文书