Node.js 实现博客内容抓取实例

作者:慢半拍

时间:2026-10-30

浏览:649

本文介绍如何使用 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 进行爬虫开发有所帮助。若有任何疑问,欢迎在下方留言讨论。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章