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 1.0.4 - New Wave Javascript(js源文件)
Jan 15 Javascript
Flash+XML滚动新闻代码 无图片 附源码下载
Nov 22 Javascript
javawscript 三级菜单的实现原理
Jul 01 Javascript
jQuery结合Json提交数据到Webservice,并接收从Webservice返回的Json数据
Feb 18 Javascript
批量修改标签css样式以input标签为例
Jul 31 Javascript
用js提交表单解决一个页面有多个提交按钮的问题
Sep 01 Javascript
JavaScript实现仿网易通行证表单验证
May 25 Javascript
详解webpack自动生成html页面
Jun 29 Javascript
详谈for循环里面的break和continue语句
Jul 20 Javascript
Vue CLI3中使用compass normalize的方法
May 30 Javascript
vue实现分页加载效果
Dec 24 Javascript
解决vue init webpack 下载依赖卡住不动的问题
Nov 09 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
用文本文件制作留言板提示(上)
2006/10/09 PHP
php基础知识:控制结构
2006/12/13 PHP
php实现Linux服务器木马排查及加固功能
2014/12/29 PHP
javascript+php实现根据用户时区显示当地时间的方法
2015/03/11 PHP
php把文件设置为插件的技巧方法
2020/02/03 PHP
转换字符串为json对象的方法详解
2013/11/29 Javascript
Extjs4中tree的拖拽功能(可以两棵树之间拖拽) 简单实例
2013/12/08 Javascript
通过JS来判断页面控件是否获取焦点
2014/01/03 Javascript
jquery 实现两级导航菜单附效果图
2014/03/07 Javascript
Jquery实现侧边栏跟随滚动条固定(兼容IE6)
2014/04/02 Javascript
百度UEditor编辑器如何关闭抓取远程图片功能
2015/03/03 Javascript
基于express中路由规则及获取请求参数的方法
2018/03/12 Javascript
react中使用swiper的具体方法
2018/05/15 Javascript
React项目动态设置title标题的方法示例
2018/09/26 Javascript
详解element-ui日期时间选择器的日期格式化问题
2019/04/08 Javascript
vue实现todolist基本功能以及数据存储功能实例详解
2019/04/11 Javascript
跟老齐学Python之玩转字符串(1)
2014/09/14 Python
python爬虫正则表达式之处理换行符
2018/06/08 Python
python截取两个单词之间的内容方法
2018/12/25 Python
pycharm修改界面主题颜色的方法
2019/01/17 Python
python通过txt文件批量安装依赖包的实现步骤
2019/08/13 Python
Django Admin中增加导出Excel功能过程解析
2019/09/04 Python
详解Python3 pandas.merge用法
2019/09/05 Python
python属于解释型语言么
2020/06/15 Python
Pycharm导入anaconda环境的教程图解
2020/07/31 Python
5分钟实现Canvas鼠标跟随动画背景
2019/11/18 HTML / CSS
挪威手表购物网站:Klokker
2016/09/19 全球购物
Expedia韩国官网:亚洲发展最快的在线旅游门户网站
2018/02/26 全球购物
十佳教师事迹材料
2014/01/11 职场文书
园艺师求职信
2014/04/27 职场文书
银行授权委托书范本
2014/10/04 职场文书
行政主管岗位职责
2015/02/03 职场文书
个人先进事迹总结
2015/02/26 职场文书
2015年环境整治工作总结
2015/05/22 职场文书
文艺演出主持词
2015/07/01 职场文书
修改并编译golang源码的操作步骤
2021/07/25 Golang