Nodejs抓取网易云音乐榜单

Nodejs抓取网易云音乐榜单

地址:https://github.com/cuebyte/MusicHunter 今天闲来无事,听音乐的时候突发奇想写了个玩具。 主要是用来定时抓取你所需要的榜单(仅限网易云音乐),榜单id可以在客户端的url里找到。 分享给大家,希望大家喜欢。初学node,请多多指教。

4 回复

Nodejs抓取网易云音乐榜单

地址:


今天闲来无事,听音乐的时候突发奇想写了个小工具。这个工具主要是用来定时抓取网易云音乐的榜单信息。榜单ID可以在客户端的URL里找到。

使用方法:

  1. 安装依赖: 首先需要安装 axioscheerio 这两个库来帮助我们进行网络请求和解析HTML。

    npm install axios cheerio
    
  2. 编写代码: 创建一个简单的Node.js脚本,用于抓取网易云音乐的榜单信息。

    const axios = require('axios');
    const cheerio = require('cheerio');
    
    async function fetchMusicList榜单ID() {
      try {
        // 获取网易云音乐榜单页面
        const response = await axios.get(`https://music.163.com/discover/toplist?id=${榜单ID}`);
        const html = response.data;
    
        // 使用cheerio加载HTML
        const $ = cheerio.load(html);
    
        // 提取榜单信息
        const songs = [];
        $('.f-hide a').each((index, element) => {
          const songName = $(element).text();
          const songUrl = 'https://music.163.com' + $(element).attr('href');
          songs.push({ songName, songUrl });
        });
    
        return songs;
      } catch (error) {
        console.error('抓取失败:', error);
      }
    }
    
    // 示例: 抓取榜单ID为3779629的榜单
    const 榜单ID = 3779629;
    fetchMusicList榜单ID(榜单ID).then(songs => {
      console.log('榜单歌曲:', songs);
    }).catch(error => {
      console.error('发生错误:', error);
    });
    

解释:

  1. 安装依赖:

    • axios: 用于发送HTTP请求。
    • cheerio: 用于解析HTML。
  2. 抓取逻辑:

    • 使用 axios.get 发送请求到网易云音乐榜单页面。
    • 使用 cheerio.load 加载返回的HTML。
    • 使用选择器 .f-hide a 来提取榜单中的歌曲名称和链接。
    • 将每首歌的信息存储在一个数组中并返回。
  3. 示例:

    • 通过修改 榜单ID 变量,可以抓取不同的榜单信息。

希望这个小工具对你有帮助!如果你有任何问题或建议,欢迎在GitHub上提Issue。


怎么只看到一个文件。。。

确实只有一个文件,就100行代码。

Node.js 抓取网易云音乐榜单

简介

本文将介绍如何使用 Node.js 来抓取网易云音乐的榜单数据。我们将使用 axioscheerio 库来完成 HTTP 请求和 HTML 解析。

需求

  1. 安装必要的依赖

    • axios: 用于发起 HTTP 请求。
    • cheerio: 用于解析 HTML 并提取所需的数据。

    你可以通过以下命令安装这些依赖:

    npm install axios cheerio
    
  2. 获取榜单 ID 在网易云音乐的榜单页面中,可以通过查看 URL 中的参数来获取榜单 ID。例如,榜单 URL 可能类似于 https://music.163.com/discover/toplist?id=3779629,其中 id=3779629 即为榜单 ID。

  3. 编写代码

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

async function fetchTopList(id) {
    const url = `https://music.163.com/discover/toplist?id=${id}`;
    try {
        const response = await axios.get(url);
        const html = response.data;
        const $ = cheerio.load(html);

        // 提取歌曲列表
        const songs = [];
        $('.song-item').each((index, element) => {
            const title = $(element).find('.txt > a').text().trim();
            const artist = $(element).find('.by>a').text().trim();
            songs.push({
                title,
                artist
            });
        });

        return songs;
    } catch (error) {
        console.error('Error fetching data:', error);
        return null;
    }
}

// 使用示例
const listId = '3779629'; // 你的榜单ID
fetchTopList(listId).then(songs => {
    if (songs) {
        console.log('榜单数据:', songs);
    } else {
        console.log('未能获取到榜单数据');
    }
});

说明

  • fetchTopList 函数:该函数接受一个榜单 ID,并返回该榜单中的歌曲列表。
  • axios.get(url): 发起 HTTP GET 请求以获取指定榜单页面的 HTML 内容。
  • cheerio.load(html): 将 HTML 字符串加载到 Cheerio 中,以便我们能够使用类似 jQuery 的语法来选择和操作 DOM 元素。
  • .each() 方法:遍历所有匹配的元素(在这里是每个歌曲条目),并提取标题和艺术家名称。
  • .find() 方法:查找特定的子元素,如 <a> 标签内的文本。

总结

以上代码展示了如何使用 Node.js 抓取网易云音乐的榜单数据。你可以根据需要调整和扩展此代码,例如增加错误处理、日志记录等功能,或者将抓取的数据存储到数据库中。希望对你有所帮助!

回到顶部