Nodejs抓取网易云音乐榜单
Nodejs抓取网易云音乐榜单
地址:https://github.com/cuebyte/MusicHunter 今天闲来无事,听音乐的时候突发奇想写了个玩具。 主要是用来定时抓取你所需要的榜单(仅限网易云音乐),榜单id可以在客户端的url里找到。 分享给大家,希望大家喜欢。初学node,请多多指教。
Nodejs抓取网易云音乐榜单
地址:
今天闲来无事,听音乐的时候突发奇想写了个小工具。这个工具主要是用来定时抓取网易云音乐的榜单信息。榜单ID可以在客户端的URL里找到。
使用方法:
-
安装依赖: 首先需要安装
axios
和cheerio
这两个库来帮助我们进行网络请求和解析HTML。npm install axios cheerio
-
编写代码: 创建一个简单的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); });
解释:
-
安装依赖:
axios
: 用于发送HTTP请求。cheerio
: 用于解析HTML。
-
抓取逻辑:
- 使用
axios.get
发送请求到网易云音乐榜单页面。 - 使用
cheerio.load
加载返回的HTML。 - 使用选择器
.f-hide a
来提取榜单中的歌曲名称和链接。 - 将每首歌的信息存储在一个数组中并返回。
- 使用
-
示例:
- 通过修改
榜单ID
变量,可以抓取不同的榜单信息。
- 通过修改
希望这个小工具对你有帮助!如果你有任何问题或建议,欢迎在GitHub上提Issue。
确实只有一个文件,就100行代码。
Node.js 抓取网易云音乐榜单
简介
本文将介绍如何使用 Node.js 来抓取网易云音乐的榜单数据。我们将使用 axios
和 cheerio
库来完成 HTTP 请求和 HTML 解析。
需求
-
安装必要的依赖
axios
: 用于发起 HTTP 请求。cheerio
: 用于解析 HTML 并提取所需的数据。
你可以通过以下命令安装这些依赖:
npm install axios cheerio
-
获取榜单 ID 在网易云音乐的榜单页面中,可以通过查看 URL 中的参数来获取榜单 ID。例如,榜单 URL 可能类似于
https://music.163.com/discover/toplist?id=3779629
,其中id=3779629
即为榜单 ID。 -
编写代码
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 抓取网易云音乐的榜单数据。你可以根据需要调整和扩展此代码,例如增加错误处理、日志记录等功能,或者将抓取的数据存储到数据库中。希望对你有所帮助!