深入Node.js:实现网易云音乐数据自动化抓取

news2025/1/22 9:12:45

Python_00023.png
随着互联网技术的飞速发展,数据已成为企业和个人获取信息、洞察市场趋势的重要资源。音频数据,尤其是来自流行音乐平台如网易云音乐的数据,因其丰富的用户交互和内容多样性,成为研究用户行为和市场动态的宝贵资料。本文将深入探讨如何使用Node.js技术实现网易云音乐数据的自动化抓取。

一、Node.js简介

Node.js是一个基于Chrome V8引擎的JavaScript运行环境,它允许开发者在服务器端运行JavaScript代码。Node.js的非阻塞I/O模型使其在处理大量并发连接时表现出色,非常适合构建高性能的网络应用。

二、项目准备

在开始构建网易云音乐数据抓取项目之前,我们需要准备以下工具和库:

  • Node.js环境:确保已安装Node.js。
  • npm(Node Package Manager):Node.js的包管理器,用于安装和管理项目依赖。
  • Mongoose:一个MongoDB对象模型工具,用于操作数据库。
  • Cheerio:一个服务器端的jQuery实现,用于解析HTML。
  • Request或Axios:用于发送HTTP请求。
  • 代理服务器:由于反爬虫机制,可能需要使用代理服务器。

三、项目结构设计

一个基本的网易云音乐数据抓取项目可能包含以下几个部分:

  1. 数据库模型设计:使用Mongoose设计音频数据的存储模型。
  2. 爬虫逻辑:编写爬取网易云音乐数据的逻辑。
  3. 数据解析:解析爬取到的HTML,提取音频信息。
  4. 数据存储:将解析得到的数据存储到MongoDB数据库。
  5. 错误处理:处理网络请求和数据解析过程中可能出现的错误。
  6. 定时任务:设置定时任务,实现数据的周期性抓取。

四、实现步骤

4.1 安装依赖

首先,通过npm安装所需的库:

npm install mongoose cheerio request axios

4.2 设计数据库模型

使用Mongoose设计一个音频数据模型,例如:

const mongoose = require('mongoose');

const AudioSchema = new mongoose.Schema({
  title: { type: String, required: true },
  artist: { type: String, required: true },
  url: { type: String, required: true },
  duration: { type: Number, required: true },
});

const Audio = mongoose.model('Audio', AudioSchema);

4.3 编写爬虫逻辑

编写一个异步函数crawlAudio,用于爬取网易云音乐的数据:

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

// 设置代理信息
process.env.http_proxy = 'http://' + encodeURIComponent('16QMSOML') + ':' + encodeURIComponent('280651') + '@www.16yun.cn:5445';
process.env.https_proxy = process.env.http_proxy;

async function crawlAudio(url) {
  try {
    // 使用axios发送请求,代理配置已经在环境变量中设置
    const response = await axios.get(url);
    const $ = cheerio.load(response.data);
    const audios = [];

    // 假设Audio是之前定义的Mongoose模型
    $('audio').each((index, element) => {
      const title = $(element).attr('title');
      const artist = $(element).attr('artist');
      const url = $(element).attr('src');
      const duration = $(element).attr('duration');
      audios.push({ title, artist, url, duration }); // 这里应该是一个对象,而不是Audio实例
    });

    // 批量保存到数据库,假设Audio.insertMany是之前定义的Mongoose模型的静态方法
    await Audio.insertMany(audios);
  } catch (error) {
    console.error('Crawl error:', error);
  }
}

// 调用函数,传入需要爬取的URL
crawlAudio('http://music.163.com/discover');

4.4 数据解析与存储

在爬虫逻辑中,使用Cheerio解析HTML,提取音频的标题、艺术家、URL和时长,然后创建Audio模型的实例,并保存到MongoDB数据库。

4.5 错误处理

在爬虫函数中添加错误处理逻辑,确保在请求失败或解析错误时能够记录错误信息,避免程序崩溃。

4.6 设置定时任务

使用Node.js的node-schedule库设置定时任务,例如每天凌晨抓取数据:

const schedule = require('node-schedule');

schedule.scheduleJob('0 0 * * *', function(){
  crawlAudio('http://music.163.com/discover');
});

五、项目优化

  1. 代理池管理:为了应对IP被封的问题,可以引入代理池管理,动态切换代理。
  2. 分布式爬虫:对于大规模的数据抓取,可以考虑使用分布式爬虫技术。
  3. 数据清洗:对抓取的数据进行清洗,确保数据的准确性和可用性。
  4. 用户行为分析:对抓取的数据进行分析,挖掘用户行为模式和市场趋势。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1837594.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

maven安装、配置与plugins报红的解决方法

maven安装与配置 1.在官网中下载maven 官网地址:https://maven.apache.org/ 2.解压maven压缩包 将maven解压到一个没有中文的文件夹中: 3.配置环境变量并验证 1、在设置中找到 “高级系统设置”,点击后再点击环境变量: 2、在 “系…

Arcgis导入excel出现的问题

我手动添加了object-id字段也没有用,然后再excel里面又添加了一行,关闭后打开还是不行,额案后在网上看到了一种方法,很有效,予以记录。 1、我的文件是csv格式, 先在excel里面另存为xlsx格式 2、转换工具里…

【植物大战僵尸】C语言教程

Hi~!这里是奋斗的小羊,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~ 💥💥个人主页:奋斗的小羊 💥💥所属专栏:C语言 🚀本系列文章为个人学习…

云徙科技助力竹叶青实现用户精细化运营,拉动全渠道销售额增长

竹叶青茶以其别具一格的风味与深厚的历史底蕴,一直被誉为茶中瑰宝。历经千年的传承与创新,竹叶青不仅坚守着茶叶品质的极致追求,更在数字化的浪潮中,率先打破传统,以科技力量赋能品牌,成为茶行业的领军者。…

深度剖析ElasticSearch分页原理与深分页问题|ES深分页问题|ES分页原理剖析

文章目录 ES分页|Paginate search resultsES深分页的问题一页获取数据量太大,报错分页深度太大,报错官方解释 其他解决方案Search after解决两个问题 有没有深分页查询的必要性?search after & PIT的使用方式1.创建pit2.首次查询3.之后的…

33、循环语句--函数---递归+阶乘

一、函数 1.1、shell的函数 1.1.1、函数的定义:将命令序列按照格式写在一起。格式指的是函数的固定格式。两种格式。 for i in {}do命令序列doneif []then 命令序列else命令序列fi #可以作为一个命令序列作用:方便重复使用,函数库&…

在 Go 中如何让结构体不可比较?

最近我在使用 Go 官方出品的结构化日志包 slog 时,看到 slog.Value 源码中有一个比较好玩的小 Tips,可以限制两个结构体之间的相等性比较,本文就来跟大家分享下。 在 Go 中结构体可以比较吗? 在 Go 中结构体可以比较吗&#xff…

Elasticsearch docker 安装及基本用法

创建网络 首先通过命令创建一个网络 docker network create es-net然后查看网络 [rootDocker ~]# docker network ls NETWORK ID NAME DRIVER SCOPE 4e315f5e3ae7 bridge bridge local a501a9f3b4ee es-net bridge local ebca66b02e8c host …

十一、数据结构(图的最短路)

文章目录 基础部分最短路径问题用 D F S DFS DFS搜索所有的路径用 B F S BFS BFS求最短路径 最短路算法 F l o y d Floyd Floydcode(Floyd的实现): S P F A SPFA SPFAcode(基于邻接表的 S P F A ) SPFA) SPFA) D i j k s t r a Dijkstra Dijkstracode(dijkstra的实现…

PHP实现企业微信素材上传与获取的完整指南与踩坑日记

企业微信作为一款专门为企业打造的即时通讯工具,提供了丰富的功能和接口,其中包括素材管理。素材管理在企业内部的沟通、分享和展示中起着重要的作用。本篇文章将介绍如何使用PHP语言对接企业微信素材上传和获取的功能。 ## 1. 准备工作 首先&#xff0…

AI数据分析:Excel表格智能判断数据起点来计算增长率

工作任务:计算Excel表格中2023年1月到2024年4月的总增长率和复合增长率。 如果数据都有的情况下,公式很简单: 总增长率 (O2-B2)/B2 复合增长率 POWER((O2/B2),1/13)-1 但是,2023年1月、2月、3月的数据,有些有&…

LLM2Vec论文阅读笔记

这是篇LLM论文,用decoder-like的LLM去提取embedding文章认为,decoder-like的LLM在text embedding task表现不优的一大原因就是其casual attention mechanism,其实就是mask的问题。所以只要对现有的decoder-only LLM进行如下三步改进&#xff…

SpringBoot配置第三方专业缓存技术jetcache方法缓存方案

jetcache方法缓存 我们可以给每个方法配置缓存方案 JetCache 是一个基于 Java 的缓存库,支持多种缓存方案和缓存策略,主要用于提升应用程序的性能和响应速度。它提供了多种缓存模式和特性,可以根据需求选择合适的缓存方案。 JetCache 的主…

VPC Access Connector 介绍 - 让 Non-VPC product 也可以访问VPC Network内的资源

什么是VPC product 和 非 VPC product 在GCP 上, VPC product 指的是属于某个制定的vpc subnet, 具有至少1个 该 subnet 的内网ip的产品 常见的例如: compute engine / MIG (managed instances group)某些dataflow job (指定了 可选参数subnet )Cloud …

C++设计模式——Composite组合模式

一,组合模式简介 真实世界中,像企业组织、文档、图形软件界面等案例,它们在结构上都是分层次的。将系统分层次的方式使得统一管理和添加不同子模块变得容易,在软件开发中,组合模式的设计思想和它们类似。 组合模式是…

复分析——第4章——Fourier变换(E.M. Stein R. Shakarchi)

第4章 Fouier变换 Raymond Edward Alan Christopher Paley, Fellow of Trinity College, Cambridge, and International Research Fellow at the Massachusetts Institute of Technology and at Harvard University, was killed by an avalanche on April 7, 1933, whi…

Golang | Leetcode Golang题解之第166题分数到小数

题目&#xff1a; 题解&#xff1a; func fractionToDecimal(numerator, denominator int) string {if numerator%denominator 0 {return strconv.Itoa(numerator / denominator)}s : []byte{}if numerator < 0 ! (denominator < 0) {s append(s, -)}// 整数部分numer…

中科数安 | 加密管理系统

中科数安提供的加密管理系统是一套全面而高效的数据安全解决方案&#xff0c;旨在保护企业核心文件资料的安全。该系统结合了多种先进的技术手段和管理策略&#xff0c;确保企业数据在存储、传输和使用过程中都得到严格的保护。 www.weaem.com 以下是中科数安加密管理系统的主要…

ES 8.14 Java 代码调用,增加knnSearch 和 混合检索 mixSearch

1、pom依赖 <dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-client</artifactId><version>8.14.0</version></dependency><dependency><groupId>co.elastic.clients<…

可解释机器学习之SHAP方法

以Breast cancer wisconsin (diagnostic) dataset数据集为例。 # Built-in libraries import math import numpy as np import pandas as pd# Visualization libraries import matplotlib.pyplot as plt import seaborn as sns# Sklearn libraries # from skle…