Nodejs - 时时刻刻 - 豆瓣一刻网页版
Nodejs - 时时刻刻 - 豆瓣一刻网页版
之前 试验 PouchDB 就是为了这个站准备的,几乎就是 爱知乎 的翻版,界面什么的只是做了一点稍微的调整,暂时还没想到好的 idea,也没时间去调整,丑哭TT。
这次相比采集 知乎日报 麻烦的一点是 知乎日报 可以随便爬,而 豆瓣一刻 有爬虫识别算法,暂时也没时间跟它斗智斗勇了,就这样吧……
专题(其实 columns 分类)还没时间实现,暂时就先这样吧……
同样部署在了 JAE 上:http://thehours.jd-app.com/
Nodejs - 时时刻刻 - 豆瓣一刻网页版
简介
最近开发了一个名为“时时刻刻”的网站,主要功能是从豆瓣一刻(Douban Moment)采集文章,并展示给用户。这个项目受到了我之前做的“爱知乎”项目的启发,但为了应对豆瓣一刻的反爬虫机制,我在技术选型上做了一些调整。
技术栈
- Node.js: 用于后端逻辑处理。
- Express.js: 作为Web框架,简化路由管理和中间件配置。
- Cheerio: 用于解析HTML并提取数据。
- PouchDB: 用于本地存储,减少对外部API的依赖。
- JAE (Just Do It Elastic): 作为部署平台。
项目结构
thehours/
├── app.js # Express应用入口文件
├── routes.js # 路由定义
├── scraper.js # 数据抓取逻辑
├── db.js # PouchDB数据库配置
└── public/ # 静态资源目录
├── css/
└── js/
示例代码
app.js
const express = require('express');
const app = express();
const routes = require('./routes');
// 使用静态资源
app.use(express.static('public'));
// 使用路由
app.use('/', routes);
// 启动服务器
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});
scraper.js
const axios = require('axios');
const cheerio = require('cheerio');
async function fetchArticles() {
const response = await axios.get('https://moment.douban.com/articles');
const $ = cheerio.load(response.data);
const articles = [];
$('.article-list .article-item').each((index, element) => {
const title = $(element).find('.title').text().trim();
const link = $(element).find('.title a').attr('href');
articles.push({ title, link });
});
return articles;
}
module.exports = fetchArticles;
db.js
const PouchDB = require('pouchdb');
const db = new PouchDB('articles');
// 示例:将文章保存到本地数据库
function saveArticle(article) {
return db.put(article);
}
module.exports = { saveArticle };
总结
虽然豆瓣一刻有一些反爬虫机制,使得直接抓取变得更加复杂,但我还是通过一些简单的技巧成功实现了数据抓取。目前,专题分类功能还没有实现,但我会在未来的时间里继续优化和完善这个项目。
你可以访问 时时刻刻 来体验这个网页版的豆瓣一刻。
背景图也是爬来的?
显然不是,自动生成的 https://github.com/btmills/geopattern
根据你的描述,“Nodejs - 时时刻刻 - 豆瓣一刻网页版”的帖子主要介绍了如何通过 Node.js 开发一个采集豆瓣一刻内容的网站。以下是对帖子内容的简要总结和一些关键点的解释。
网站介绍
- 名称: 时时刻刻 (TheHours)
- 目标: 采集豆瓣一刻的内容并展示出来。
- 技术: 使用 Node.js 和一些前端技术(如 HTML, CSS, JavaScript)。
- 部署平台: JAE (京东云应用引擎)
技术难点
- 豆瓣一刻的反爬虫机制:豆瓣一刻有较为完善的爬虫识别算法,导致直接抓取内容变得困难。因此,作者可能使用了一些绕过反爬虫的方法或策略。
界面设计
- 界面基于爱知乎进行了一定的修改和调整,但目前还比较简单,有待进一步优化。
主要功能
- 目前主要展示了豆瓣一刻的文章列表。
- 专栏分类(columns)功能尚未实现。
示例代码
虽然具体的实现细节未在帖子中详细说明,但可以提供一个简单的 Node.js 代码片段来抓取网页内容,这里用到了 axios
来发送 HTTP 请求和 cheerio
解析 HTML。
const axios = require('axios');
const cheerio = require('cheerio');
async function fetchDoubanMoment() {
const response = await axios.get('https://moment.douban.com');
const $ = cheerio.load(response.data);
// 假设每篇文章的标题在一个 class 为 "title" 的 div 中
$('.title').each((index, element) => {
console.log($(element).text());
});
}
fetchDoubanMoment();
注意
此示例代码仅用于演示如何抓取网页内容,实际使用时需要考虑反爬虫策略和法律合规性问题。此外,豆瓣一刻的具体页面结构可能会变化,因此需要根据实际情况调整解析逻辑。