Nodejs实现的一个豆瓣数据统计网站

Nodejs实现的一个豆瓣数据统计网站

https://github.com/ktmud/doubanj

源码如上

结果示例: http://www.doubanj.com/people/jyyjcc/read

其实做这些玩意儿的过程就是不断尝试新东西的过程。欢迎有兴趣的同学一起加入开发。

如果环境配置时遇到任何困难,欢迎骚扰。


15 回复

Nodejs实现的一个豆瓣数据统计网站

简介

本项目旨在通过使用Node.js来创建一个豆瓣数据统计网站,该网站能够从豆瓣获取用户读书、观影等信息,并进行统计分析。项目代码托管在GitHub上,欢迎大家共同参与开发。

源码地址

结果展示

开发过程

在开发过程中,我们主要使用了以下技术栈:

  • Node.js: 后端服务器框架。
  • Express: 轻量级Web应用框架。
  • axios: HTTP客户端库,用于请求豆瓣API。
  • cheerio: 服务器端的jQuery库,用于解析HTML。

示例代码

// 导入所需模块
const express = require('express');
const axios = require('axios');
const cheerio = require('cheerio');

// 创建应用实例
const app = express();

// 获取豆瓣用户读书信息的路由
app.get('/user/:username', async (req, res) => {
    const username = req.params.username;
    try {
        // 请求豆瓣用户页面
        const response = await axios.get(`https://book.douban.com/people/${username}/reviews`);
        const $ = cheerio.load(response.data);

        // 解析HTML
        let books = [];
        $('.subject-item').each((index, element) => {
            const title = $(element).find('.title a').text().trim();
            const author = $(element).find('.author').text().trim();
            books.push({ title, author });
        });

        // 返回结果
        res.json(books);
    } catch (error) {
        console.error(error);
        res.status(500).json({ error: 'Failed to fetch data' });
    }
});

// 监听端口
app.listen(3000, () => {
    console.log('Server is running on port 3000');
});

参与方式

如果你对这个项目感兴趣,欢迎加入我们的开发团队。你可以在GitHub仓库中提交Issue或Pull Request,或者直接联系项目维护者。如果有任何问题或需要帮助的地方,请随时联系我们。


希望这份介绍能帮助大家更好地理解和参与这个项目。期待你的加入!


收藏咯, 新手骚扰 莫怪

我觉得你需要说明一下,做这个东西的意义和价值。

现在可以看到你与友邻读书品味的契合指数了,顶一下

很不错,看到数据,自己最近都没怎么读书了。

1

赞一个,楼主实现了我想做很久但是一直没做的事

好多技术书的样子, 全都自己买么?

提高技能

欢迎提交 pull request 哦

很喜欢这个网站

好东西要fork

哎哟哎哟,可视化不错噢。

太赞了!

话说我现在嵌入一个iframe会怎么样,如果能嵌入的话,是不是就会有跨站的危险? <iframe style=“width:100%;height=300px” src=“http://www.doubanj.com/people/jyyjcc/read” frameborder=“0”></iframe>

whatever, don’t case 反正没什么需要用户填数据的地方,取到的也都是公开数据

对于“Nodejs实现的一个豆瓣数据统计网站”的问题,我们可以基于提供的GitHub链接(https://github.com/ktmud/doubanj)来理解和解答。这个项目似乎是一个用于统计豆瓣用户书籍阅读情况的数据统计网站。为了更好地帮助理解,我将提供一个简化版的示例代码来展示如何使用Node.js获取并处理豆瓣API数据。

示例代码

首先,确保安装了必要的依赖库:

npm install axios cheerio

然后创建一个简单的服务器脚本server.js:

const axios = require('axios');
const cheerio = require('cheerio');

async function fetchUserBooks(userId) {
    const response = await axios.get(`https://book.douban.com/people/${userId}/collect`);
    return cheerio.load(response.data);
}

function parseBookInfo($, index) {
    const bookTitle = $('.title a').eq(index).text().trim();
    const bookLink = $('.title a').eq(index).attr('href');
    const rating = $('.rating_nums').eq(index).text().trim();

    return { bookTitle, bookLink, rating };
}

async function getUserBooks(userId, count = 5) {
    const $ = await fetchUserBooks(userId);
    let books = [];

    for (let i = 0; i < count; i++) {
        books.push(parseBookInfo($, i));
    }

    return books;
}

getUserBooks('jyyjcc', 10).then(books => console.log(books)).catch(err => console.error(err));

解释

  • axios: 用来发送HTTP请求。
  • cheerio: 一个轻量级的HTML解析器,类似jQuery。
  • fetchUserBooks 函数用于从豆瓣抓取指定用户的书单页。
  • parseBookInfo 函数负责解析出每本书的信息,包括书名、链接和评分。
  • getUserBooks 函数通过循环调用parseBookInfo来获取多本书的信息。

注意事项

  1. 上述代码仅作为演示,实际部署时应考虑异常处理、错误重试等机制。
  2. 豆瓣API未公开,因此使用网页爬虫访问数据可能会违反其服务条款。建议遵守法律法规,尊重网站版权。

希望这个示例能为你提供一些灵感!如果你对更详细的实现或功能扩展感兴趣,请查看GitHub上的完整项目。

回到顶部