Node.js 实现博客内容抓取实例
作者:慢半拍时间:2026-10-30 15:00:33浏览:650
本文介绍如何使用 Node.js 结合 Cheerio 和 Bluebird 库实现一个简单的博客内容爬虫。通过解析 HTML DOM 结构,提取文章链接、标题及评论数等关键信息,并提供完整的示例代码供参考与修改。
Node.js 博客爬虫实现概述
前言
网络爬虫是一种自动抓取网页内容的程序,作为搜索引擎的核心组成部分,搜索引擎优化工作很大程度上需要针对爬虫机制进行适配与调整。
本文旨在展示如何利用 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 进行爬虫开发有所帮助。若有任何疑问,欢迎在下方留言讨论。
作者最新文章
Java和JavaScript名字像但没关系?详解两者及HTML的技术分工
2026-11-03 20:24:10
Node.js 中 CommonJS 与 ES Modules 模块规范的区别及使用
2026-11-03 15:35:13
先学JS还是先学Java?全栈开发视角的学习路径规划
2026-11-03 13:35:26
解决Node.js安装后提示“node不是内部或外部命令”
2026-11-03 08:39:43
生产环境升级 Node.js 的风险评估与 LTS 版本选择
2026-11-02 10:30:14
