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 相关文章推荐
滚动经典最新话题[prototype框架]下编写
Oct 03 Javascript
js跨域和ajax 跨域问题的实现思路
Sep 05 Javascript
利用javascript解决图片缩放及其优化的代码
May 23 Javascript
学习Bootstrap滚动监听 附调用方法
Jul 02 Javascript
基于BootStrap的Metronic框架实现页面链接收藏夹功能按钮移动收藏记录(使用Sortable进行拖动排序)
Aug 29 Javascript
jQuery弹出div层过2秒自动消失
Nov 29 Javascript
jquery实现瀑布流效果 jquery下拉加载新数据
Dec 12 Javascript
Vue制作Todo List网页
Apr 26 Javascript
JS轮播图实现简单代码
Feb 19 Javascript
详解Angular如何正确的操作DOM
Jul 06 Javascript
如何从0开始用node写一个自己的命令行程序
Dec 29 Javascript
基于javascript实现移动端轮播图效果
Dec 21 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 radio 单选框获取与保持值的实现代码
2010/05/15 PHP
php实现数组按指定KEY排序的方法
2015/03/30 PHP
PHP实现通过URL提取根域名
2016/03/31 PHP
laravel手动创建数组分页的实现代码
2018/06/07 PHP
jQuery结合Json提交数据到Webservice,并接收从Webservice返回的Json数据
2011/02/18 Javascript
js实现鼠标感应图片展示的方法
2015/02/27 Javascript
JS实现黑色大气的二级导航菜单效果
2015/09/18 Javascript
谈谈jQuery Ajax用法详解
2015/11/27 Javascript
JS获取当前页面名称的简单实例
2016/08/19 Javascript
jQuery插件zTree实现的多选树效果示例
2017/03/08 Javascript
深入浅析AngularJs模版与v-bind
2018/07/06 Javascript
vue+element-ui集成随机验证码+用户名+密码的form表单验证功能
2018/08/05 Javascript
Nodejs实现多文件夹文件同步
2018/10/17 NodeJs
微信小程序新闻网站详情页实例代码
2020/01/10 Javascript
基于原生js实现九宫格算法代码实例
2020/07/03 Javascript
Python UnboundLocalError和NameError错误根源案例解析
2018/10/31 Python
python pycharm的安装及其使用
2019/10/11 Python
python 读取更新中的log 或其它文本方式
2019/12/24 Python
Python自动重新加载模块详解(autoreload module)
2020/04/01 Python
使用Tensorflow-GPU禁用GPU设置(CPU与GPU速度对比)
2020/06/30 Python
Python编写memcached启动脚本代码实例
2020/08/14 Python
python 将列表里的字典元素合并为一个字典实例
2020/09/01 Python
OpenCV+python实现膨胀和腐蚀的示例
2020/12/21 Python
HTML5在IE10、火狐下中文乱码问题的解决方法
2013/11/18 HTML / CSS
上海中网科技笔试题
2012/02/19 面试题
房地产管理毕业生自荐信
2013/11/04 职场文书
路政管理专业个人自荐信范文
2013/11/30 职场文书
市场部专员岗位职责
2013/11/30 职场文书
市场调查策划方案
2014/06/10 职场文书
加油口号大全
2014/06/13 职场文书
弄虚作假心得体会
2014/09/10 职场文书
党员自评材料范文
2014/12/17 职场文书
2016感恩母亲节校园广播稿
2015/12/17 职场文书
Python机器学习之基础概述
2021/05/19 Python
Oracle以逗号分隔的字符串拆分为多行数据实例详解
2021/07/16 Oracle
Java死锁的排查
2022/05/11 Java/Android