Nodejs cnbeta-rss : 抓取 cnbeta 全文 + 热门评论 [开源]
Nodejs cnbeta-rss : 抓取 cnbeta 全文 + 热门评论 [开源]
github : https://github.com/vfasky/cnbeta-rss
cnbeta-rss
-
cnbeta 全文 + 热门评论 feed 输出
-
基于 nodejs , mongoDb 性能强劲
-
在 2 分钟内完成与 cnbeta.com 新内容的同步
demo :
-
http://cnbeta.cnodejs.net NAE 云引擎
-
http://vfasky.hp.af.cm appfog 云引擎
特色 :
-
简单实现的 MVC , 可以当入门示例
-
实现了简单的定时任务
-
性能明显优于我写的PHP版 : http://cnbetarss.sinaapp.com/
版权声明 :
-
程序抓取的内容,版权归原作者所有
-
不得利用抓取的内容取得任何形式的收入,除非原作者授权
-
程序源代码的授权是 : BSD
为什么会有这个程序?
-
cnbeta.com 的广告太多了, 打开速度相当慢
-
已经习惯用 RSS 阅读器看新闻, cnbeta 的 RSS 没有全文输出
Nodejs cnbeta-rss : 抓取 cnbeta 全文 + 热门评论 [开源]
GitHub 地址
cnbeta-rss
项目简介
- cnbeta 全文 + 热门评论 feed 输出
- 基于 Node.js 和 MongoDB,性能强劲
- 在 2 分钟内完成与 cnbeta.com 新内容的同步
Demo
-
NAE 云引擎
-
AppFog 云引擎
特色
-
简单的 MVC 实现
- 可以作为入门示例,便于理解 MVC 架构。
-
实现了简单的定时任务
- 定时任务用于定期抓取 cnbeta 的最新内容。
-
性能明显优于 PHP 版本
- 相比于 PHP 版本,Node.js 版本的性能更优。
- 示例:http://cnbetarss.sinaapp.com/
版权声明
-
程序抓取的内容,版权归原作者所有
- 抓取的内容仅用于学习和研究,不得用于商业用途。
-
不得利用抓取的内容取得任何形式的收入
- 除非原作者授权,否则不得将抓取的内容用于盈利性活动。
-
程序源代码的授权是 : BSD
- 源代码采用 BSD 许可证,允许自由使用和修改。
为什么会有这个程序?
-
cnbeta.com 的广告太多,打开速度慢
- cnbeta 网站广告过多,影响了浏览体验。
-
习惯用 RSS 阅读器看新闻,但 cnbeta 的 RSS 没有全文输出
- 使用 RSS 阅读器时,发现 cnbeta 的 RSS 没有提供全文输出,因此开发此程序。
示例代码
以下是项目中的一部分核心代码,用于抓取 cnbeta 最新文章和热门评论:
const axios = require('axios');
const cheerio = require('cheerio');
// 抓取 cnbeta 最新文章列表
async function fetchArticles() {
const response = await axios.get('http://www.cnbeta.com');
const $ = cheerio.load(response.data);
// 选择文章标题和链接
const articles = [];
$('.title a').each((index, element) => {
articles.push({
title: $(element).text(),
link: $(element).attr('href')
});
});
return articles;
}
// 抓取文章全文和评论
async function fetchArticleDetails(articleLink) {
const response = await axios.get(articleLink);
const $ = cheerio.load(response.data);
// 提取文章正文
const content = $('#article_content').html();
// 提取热门评论
const comments = [];
$('.comment-item').each((index, element) => {
comments.push({
user: $(element).find('.username').text(),
comment: $(element).find('.comment-content').text()
});
});
return { content, comments };
}
// 主函数
async function main() {
const articles = await fetchArticles();
for (const article of articles) {
const details = await fetchArticleDetails(article.link);
console.log(`Title: ${article.title}`);
console.log(`Content: ${details.content}`);
console.log(`Comments: ${JSON.stringify(details.comments, null, 2)}`);
}
}
main();
这段代码展示了如何使用 axios
进行网页请求,并使用 cheerio
解析 HTML 获取所需的数据。通过这些数据,可以生成 RSS Feed 并存储到 MongoDB 中。
开源了的吗??
地址能否测试一下,你抓取的记录数量(希望万级以上)的和时间,评估一下性能?
地址: http://cnbeta.cnodejs.net
现在才运行1星期,到达万级需要一个月(视 cnbeta 每天的更新量)
很厉害的样子,马上订阅。
LZ您好,下载了你的仓库然后安装完所有依赖的packages后运行node app.js显示以下错误,不知道哪里做的不对: vents.js:71 throw arguments1; // Unhandled ‘error’ event ^ Error: listen EACCES at errnoException (net.js:769:11) at Server._listen2 (net.js:892:19) at listen (net.js:936:10) at Server.listen (net.js:985:5) at Object.<anonymous> (/Users/liaau003f/n/cnbeta-rss/cnbeta/app.js:52:27) at Module._compile (module.js:449:26) at Object.Module._extensions…js (module.js:467:10) at Module.load (module.js:356:32) at Function.Module._load (module.js:312:12) at Module.runMain (module.js:492:10)
根据提供的信息,“Nodejs cnbeta-rss : 抓取 cnbeta 全文 + 热门评论 [开源]” 这个帖子介绍了一个基于 Node.js 和 MongoDB 实现的项目,用于抓取 Cnbeta(一个科技新闻网站)的文章全文及热门评论,并生成 RSS 输出。
该项目的主要特点包括:
- 利用 Node.js 技术实现,性能强劲。
- 能够在2分钟内完成与 Cnbeta 新内容的同步。
- 提供了一个简单的 MVC 架构,适合作为入门学习示例。
- 包含了简单的定时任务功能。
- 使用 MongoDB 存储数据,确保高效的数据处理能力。
- 程序源代码采用 BSD 协议进行开源授权。
该项目不仅能够帮助用户摆脱网页中过多广告的干扰,还提供了文章的全文阅读功能。此外,它还能抓取热门评论,让用户更好地了解社区讨论。
GitHub 项目地址:https://github.com/vfasky/cnbeta-rss
以下是该项目的核心功能实现代码示例:
安装依赖
首先需要安装必要的 Node.js 包,例如 axios
用于 HTTP 请求、cheerio
用于解析 HTML 文档、mongoose
用于操作 MongoDB 数据库等。
npm install axios cheerio mongoose express
示例代码:抓取文章并保存到 MongoDB
const axios = require('axios');
const cheerio = require('cheerio');
const mongoose = require('mongoose');
// 连接到 MongoDB
mongoose.connect('mongodb://localhost:27017/cnbeta', { useNewUrlParser: true, useUnifiedTopology: true });
// 定义文章模型
const ArticleSchema = new mongoose.Schema({
title: String,
content: String,
url: String,
});
const Article = mongoose.model('Article', ArticleSchema);
// 抓取文章内容
async function fetchArticle(url) {
try {
const response = await axios.get(url);
const $ = cheerio.load(response.data);
const title = $('title').text();
const content = $('.content_detail').html(); // 假设正文在 .content_detail 类中
// 创建新的文章实例并保存到数据库
const article = new Article({ title, content, url });
await article.save();
console.log(`Article saved: ${title}`);
} catch (error) {
console.error(`Error fetching article from ${url}:`, error);
}
}
// 调用函数抓取指定 URL 的文章
fetchArticle('http://www.cnbeta.com/articles/123456.htm');
注意,上述代码中的 CSS 选择器(如 .content_detail
)需要根据实际页面结构进行调整。另外,为了抓取评论,可以使用类似的方法从评论页面获取数据。