Nodejs - 时时刻刻 - 豆瓣一刻网页版

Nodejs - 时时刻刻 - 豆瓣一刻网页版

又做了一个采集站 时时刻刻 ,这次的对象是 豆瓣一刻

之前 试验 PouchDB 就是为了这个站准备的,几乎就是 爱知乎 的翻版,界面什么的只是做了一点稍微的调整,暂时还没想到好的 idea,也没时间去调整,丑哭TT。

这次相比采集 知乎日报 麻烦的一点是 知乎日报 可以随便爬,而 豆瓣一刻 有爬虫识别算法,暂时也没时间跟它斗智斗勇了,就这样吧……

专题(其实 columns 分类)还没时间实现,暂时就先这样吧……

同样部署在了 JAE 上:http://thehours.jd-app.com/


4 回复

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 };

总结

虽然豆瓣一刻有一些反爬虫机制,使得直接抓取变得更加复杂,但我还是通过一些简单的技巧成功实现了数据抓取。目前,专题分类功能还没有实现,但我会在未来的时间里继续优化和完善这个项目。

你可以访问 时时刻刻 来体验这个网页版的豆瓣一刻。


背景图也是爬来的?

根据你的描述,“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();

注意

此示例代码仅用于演示如何抓取网页内容,实际使用时需要考虑反爬虫策略和法律合规性问题。此外,豆瓣一刻的具体页面结构可能会变化,因此需要根据实际情况调整解析逻辑。

回到顶部