利用requests爬取网易云音乐榜单并下载

article/2025/10/30 8:39:41

最近想爬取网易云音乐的歌单,发现网上很多教程都用Selenium,比较麻烦。因为研究网易云音乐排行榜html码源,发现榜单是iframe动态加载的。用原网址爬取是爬取不到内容的。想用requests爬取的话需要获取iframe的源码。

目录

  • 一、url和请求头分析
  • 二、获取信息
  • 三、下载歌曲
  • 四、写入csv文件
  • 五、代码整合

一、url和请求头分析

比如爬取这个云音乐热歌榜。网址为
https://music.163.com/#/discover/toplist?id=3778678
这样是获取不到我们想要的信息的

import requests
headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400"}
res=requests.get("https://music.163.com/#/discover/toplist?id=3778678",headers=headers).text

通过观察节点代码发现,这两个网址都是可以获取到我们想要的信息,
https://music.163.com/m/discover/toplist?id=3778678

https://music.163.com/discover/toplist?id=3778678

也就是框架的源代码。请求头非常简单只需要User-Agent就行。
在这里插入图片描述
在这里插入图片描述

二、获取信息

有了源码获取信息就变得简单了。用xpath,pyquery,beautifulsoup都行。
这里写一个类,方便爬取其他榜单的歌曲。通过观察发现我们需要获取id为
song-list-pre-data 的节点的文本信息,并且这个文本是一个列表。这里初始化了一个id参数,id对应着不同的榜单。选择用pyquery来解析源码。并转换成json格式的数据。利用get方法来寻找相应的歌曲名等。

from pyquery import PyQuery as pq
import requests
import json
import csv
import re
class Wangyi_yun(object):def __init__(self,id):#定义初始信息请求头和urlself.headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400"}self.id=idself.url="https://music.163.com/m/discover/toplist?id="+str(self.id)def get_page(self):#获取网页源代码res=requests.get(self.url,headers=self.headers).textreturn resdef get_data(self,html):#利用pyquery库解析原网页doc=pq(html)result=doc("#song-list-pre-data").text()return json.loads(result)def main(self):#获取歌曲名字等详细信息data=self.get_page()json_data=self.get_data(data)for item in range(len(json_data)):yield{"name":json_data[item].get("name"),"singer":json_data[item].get("artists")[0].get("name"),"url":"https://music.163.com/#/song?id="+str(json_data[item].get("id"))"ID":json_data[item].get("id")}

三、下载歌曲

网易云音乐的下载链接为
http://music.163.com/song/media/outer/url?id=
只需把歌曲的id补上即可。注意这里的id是歌曲的id。不是榜单的id。

	def get_download(self,ID,name):"""下载歌曲,并保存到本地工作路径:param name 歌曲名字:param ID 歌曲的ID"""	r=requests.get("http://music.163.com/song/media/outer/url?id="+ID)with open(name+".mp3","wb") as file: file.write(r.content)

四、写入csv文件

def write_csv(self, data):#参数data为main()函数生成的为字典with open("wangyiyun.csv", "a", encoding="utf-8-sig", newline='') as file:fieldnames = ["name", "singer","url"]writer = csv.DictWriter(file, fieldnames=fieldnames)writer.writerow(data)

五、代码整合

from pyquery import PyQuery as pq
import requests
import json
import csv
import re
class Wangyi_yun(object):def __init__(self,id):#定义初始信息请求头和urlself.headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400"}self.id=idself.url="https://music.163.com/m/discover/toplist?id="+str(self.id)def get_page(self):#获取网页源代码res=requests.get(self.url,headers=self.headers).textreturn resdef get_data(self,html):#利用pyquery库解析原网页doc=pq(html)result=doc("#song-list-pre-data").text()return json.loads(result)def get_download(self,ID,name):#下载歌曲,并保存到本地工作路径	#http://music.163.com/song/media/outer/url?id=为网易云的下载连接更换id即可r=requests.get("http://music.163.com/song/media/outer/url?id="+str(ID))with open(name+".mp3","wb") as file: file.write(r.content)def write_csv(self, data):#利用csv库将json数据保存到csv中with open("wangyiyun.csv", "a", encoding="utf-8-sig", newline='') as file:fieldnames = ["name", "singer","url","ID"]writer = csv.DictWriter(file, fieldnames=fieldnames)writer.writerow(data)def main(self):data=self.get_page()json_data=self.get_data(data)for item in range(len(json_data)):yield{"name":json_data[item].get("name"),"singer":json_data[item].get("artists")[0].get("name"),"url":"https://music.163.com/#/song?id="+str(json_data[item].get("id")),"ID":json_data[item].get("id")}if __name__=="__main__":            rank_music=Wangyi_yun(3779629) #参数为榜单相应url的idfor items in rank_music.main():rank_music.write_csv(items)#写入csv文件for items in rank_music.main():#遍历生成器ID=items.get("ID")name=items.get("name")rank_music.get_download(ID,name)time.sleep(3)

http://chatgpt.dhexx.cn/article/mVZPygw1.shtml

相关文章

JS逆向之网易云音乐

文章目录 1. 目标网站2. 初步分析3. 定位加密参数生成位置4. 编码测试4.1 定义AES加密方法4.2 调用两次AES加密获取params4.3 获取歌曲的url4.4 单曲下载初步测试代码4.5 飙升榜单音乐批量抓取文章内容仅用于学习和技术交流,如有侵权请联系我删除。 1. 目标网站 https://musi…

网易云音乐 For Mac

网易云音乐mac版专门为mac电脑用户使用的音乐播放软件,用户还可以使用网易云账号将电脑和手机上的音乐同步网易云音乐mac版中,使用更加方便。网易云音乐for mac比较人性化,它能根据你平时听音乐的喜好,自动给你推荐音乐&#xff0…

利用 Python 一键下载网易云音乐 10W+ 乐库

如果你常听音乐的话,肯定绕不开网易云,作为一款有情怀的音乐 App,我对网易云也是喜爱有加。虽然说现在都已经是 5G 时代了,大家的手机流量都绰绰有余,但在线播放还是不如本地存着音乐文件靠谱,今天我们就用…

网易云音乐虚化图片html,网易云音乐怎么换背景 背景图片设置方法

网易云音乐作为主流的手机音乐播放器,依托强大的社交功能,从众多播放器中脱颖而出,个性化的皮肤更是为它增加了不少魅力,下面就跟小编了解下具体的设置方法吧。 类别:影音播放 大小:90.81M 语言&#…

JAVA如何用URL下载网易云音乐

1.打开网易云,选择一首歌曲播放,然后按f12 2.找到并点击以.m4a结尾的链接 3.把输入框的链接替换代码里面的URL //1.获取资源地址URL url new URL("https://m801.music.126.net/20201006161345/802c3e2bd0240db619e27a7f1eeffcce/jdyyaac/5608/005a…

使用云函数快速升级网易云音乐等级

关于等级特权,网易云官网有介绍 https://music.163.com/#/level/details ,最高级Lv10有100G音乐云盘免费容量 使用分享的脚本是每天自动在网易云音乐刷完300首歌,让你的账号快速升级(等级数据每天下午2点更新) 一个…

网易云linux版本如何安装包,网易云音乐Linux版提供64位和32位ubuntu16.04安装包

网易云音乐终于推出了官方Linux版本,提供的下载安装包有: deepin15(32位):http://s1.music.126.net/download/pc/netease-cloud-music_0.9.0_i386.deb deepin15(64位):http://s1.music.126.net/download/pc/netease-cloud-music_0…

干货,下载网易云课堂和B站的视频

原文网址:https://www.jianshu.com/p/ad20e5a63353 我们在平时的学习中,很有可能会接触 网易云课堂 和 BIlibili 这两个很棒的网站。 有的时候我们在线观看不方便,总是想把网站里面的视频下载到电脑,然后自己闲暇时间进行学习。 方…

EasyRecovery帮你一招找回网易云下载的单曲

科技迅速发展的时代里,人们越来越离不开手机、电脑、平板等电子产品,也更习惯于把重要的音频、视频和图片储存在这些电子产品中了。既然有储存,那就有丢失,大家一定遇到过因误删文件而抓狂的情况吧。不过如今处理误删的情况也完全是小事啦,所谓一物降一物,我们有文件恢复…

网易云API接口运行教程

1.网易云api下载地址: https://neteasecloudmusicapi.js.org/#/ 2.下载或者git clone到本地 3.解压缩NeteaseCloudMusicApi-master.zip 4.在搜索框中输入cmd打开终端,在终端中输入node app.js,服务器已经运行,可以将生成地址输入到…

HC05蓝牙模块(主从一体)简单使用

使用 按住蓝牙模块上的按键,再接通电源,进入AT指令模式,可以进行AT指令设置 引脚连接 PA2(TX) -RX PA3(RX) -TX 5V VCC GND …

蓝牙模块—HC-05调试

每次拿到蓝牙模块进行调试时,都会忘记一些细节等信息。因此为了将来能够顺利地调试蓝牙模块,以本文来记录一下调试过程。 调试所需的硬件有HC-05蓝牙模块,USB转TTL模块,杜邦线若干。 首先用杜邦线将HC05与USB转TTL模块正确连接&am…

【蓝牙模块】三款常用的基础蓝牙模块,HC05,JDY-31,CC2541介绍与测试说明

文章目录 一. HC05二.JDY-311.介绍2.测试 二.CC2541 一. HC05 HC05与其他两款的区别是,需要按住RST键进入AT指令模式 一. 上电进入AT模式方法 先按住HC05蓝牙模块上面的RST按键,再给蓝牙模块通电。蓝牙模块上面的LED进入慢闪模式(约1秒钟闪烁一次)&a…

ATK-HC05蓝牙模块的详细说明

前段时间买了个ATK的HC05蓝牙模块。HC05模块是一款高性能主从一体蓝牙串口模块,可以不用知道太多蓝牙相关知识就可以很好的上手。说白了,只是个蓝牙转串口的设备,你只要知道串口怎么编程使用,就可以了, 实现了所谓的透…

Arduino使用HC05蓝牙模块与手机连接

通过本文,可以了解到以下内容: 进入 AT 模式进行蓝牙基本参数设置Arduino 蓝牙控制 LED 电路设计以及代码编写利用 Andorid 蓝牙串口调试软件测试功能 进入 At 模式进行蓝牙基本参数设置 想要使用 Arduino 的蓝牙模块,首先要对蓝牙模块进行…

HC05和电脑蓝牙通讯

通常情况下都是将HC05和HC04进行主从配对,然后进行通讯。如果手边没有HC04其实可以使用笔记本自带的蓝牙和HC05进行通讯。 配置方法如下: 将HC05配置为主机模式将电脑和HC05的保存连接删除。 单击下方更多蓝牙设置,进行蓝牙串口的配置。 添…

HC05蓝牙点亮LED

本文是对基于STM32的HC05蓝牙点灯实验,目的在于认识HC05蓝牙模块,学会配置HC05,知道怎么用蓝牙在手机上控制单片机并且传输数据,虽然本文只控制led,但是点灯就是基础,主要在于学习hc05蓝牙模块。 1.认识一下…

两个hc05蓝牙模块在两块单片机上通信(附完整代码)

目录 第一步:进入AT模式 第二步:同时插在电脑上实现通信 第三步:单片机上通信 代码链接 所需材料:两个hc05蓝牙,两个usb转串口模块,两块单片机 第一步:进入AT模式 接线图如下所示 HC-05蓝牙…

stm32+hx711+蓝牙hc05 称重系统(蓝牙电子秤)

stm32称重模块hx711蓝牙模块hc05 本项目使用主控stm32f103c8t6,称重模块hx711,蓝牙模块hc05上传至手机app/电脑app显示数值 模块 1、stm32f103c8t6最小系统板 2、hx711 HX711 模块 A 通道带有 128 倍信号增益,可以将 5mV 的电压放大 …

蓝牙模块HC05遇到的一些常见的问题

调模块总是让人很头疼,有时候遇到一些其实很简单的问题也找不到原因,着实难受。这里写一点我在配置HC05遇到的一些常见的问题和对一些问题的理解。 如果你觉得对你有帮助,希望点个赞再走,如果按照本文没解决你的问题,下…