python爬虫下载网抑云歌单音乐
最近开车总感觉车里的车载音乐非常的老土,现在都玩网抑云了,抽空看了一下它的页面,发现音乐好听,还可以下载,闲来无趣,写了个爬虫将榜单上所有的歌曲信息提取并分类下载了一下,效果还不错,比原来的车载音乐丰富多了!
import requests
from bs4 import BeautifulSoup
import osclass DownloadMusic(object):"""此程序用来爬取某云音乐所有排行榜音乐,学习使用,严禁商业用途"""def __init__(self):self.headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0'}self.url = "https://music.163.com/discover/toplist" # 框架源代码网址self.title_url = {} # 存放排行榜标题和对应网址def parse_html(self):"""解析网页:return:"""response = requests.get(url=self.url, headers=self.headers)html = BeautifulSoup(response.text, "html.parser") # 解析框架源码a_list = html.select("a") # 提取所有a标签# print(a_list)for res_url in a_list:if res_url.has_attr("href"):url = res_url.attrs["href"]if str(url).startswith("/discover/toplist?id="): # 提取所有排行榜的网址self.title_url[res_url.string] = url # 将网址和排行榜标题关联成字典的键值对del self.title_url[None] # 添加后出现一个重复网址,键名为None,需要删除def ranking_list(self):"""排行榜信息提取:return:"""for title_dir, url in self.title_url.items(): # 每次循环下载一个榜单音乐song_url = {} # 用来存放歌曲名和网址,每次循环音乐网址字典都要刷新一次# if not os.path.isdir(title_dir):# os.makedirs(title_dir) # 创建文件夹dirct = 'E:\\{}'.format(title_dir)if not os.path.isdir(dirct):os.makedirs('E:\\{}'.format(title_dir)) # 创建文件夹ranking_url = "https://music.163.com" + url # 拼接单个排行榜网址response = requests.get(url=ranking_url, headers=self.headers)html = BeautifulSoup(response.text, "html.parser") # 解析框架源码a_list = html.select("a") # 提取所有a标签for res_url in a_list:if res_url.has_attr("href"):url = res_url.attrs["href"]if str(url).startswith("/song?id"): # 提取单个排行榜下面的单个歌曲网址if res_url.string == None or res_url.string.startswith("$"): # 筛除不合格网址信息continue# http://music.163.com/song/media/outer/url?id=1491137515.mp3 完整的下载地址格式download_url = "http://music.163.com/song/media/outer/url" + url[5:] + ".mp3" # 拼接单个歌曲下载地址song_url[res_url.string] = download_url # 将歌曲名和歌曲下载地址关联成字典的键值对# print(song_url)self.download(title_dir, song_url) # 调用下载歌曲函数,每次下载一个分类# breakdef download(self, title_dir, song_url):"""下载歌曲:return:"""long = len(song_url)print("{}共有{}首音乐,开始下载!".format(title_dir, long))count = 0for url_name, url in song_url.items():# print(url_name, url)# if os.path.isfile(title_dir + "/" + url_name + ".mp3"):# print(url_name + ",本地已存在!")# continue # 若歌曲已经存在,则无需重新下载count += 1response = requests.get(url, headers=self.headers, allow_redirects=False)try:r = requests.get(response.headers['Location'], stream=True)size = int(r.headers['content-length'])print('\033[0;31m' + str(count) + "/" + str(long) + " 正在下载-" + url_name + " 文件大小:" + str(size) + "字节" + "\033[0m")schedule = 0 # 下载进度with open('E:\\{}'.format(title_dir) + "/" + url_name + ".mp3", "wb") as f:# with open(title_dir + "/" + url_name + ".mp3", "wb") as f:for chunk in r.iter_content(chunk_size=512 * 1024):if chunk:f.write(chunk)schedule += len(chunk)print("\r" + url_name + "--下载进度:" + '%3s' % (str(schedule * 100 // size)) + "%", end='')print("\n第{}首音乐《{}》下载成功!".format(count, url_name))r.close()except Exception as e:print(url_name + " 下载出错!" + " 错误信息" + str(e.args))def run(self):"""运行主程序:return:"""self.parse_html()self.ranking_list()down_music = DownloadMusic()
down_music.run()
效果如下,网速太慢了 ,每个榜单会单独生成一个文件夹,上一个榜单下载完成之后下个榜单才会生成文件夹并下载。
python爬虫下载网抑云歌单音乐相关推荐
- 小项目实现:下载网易云某个歌单的全部音乐
第一步:用歌曲地址先实现一首歌的下载 利用: song_url (例如:https://m701.music.126.net/20190719164713/77733e070e7f9c68ac6ea2 ...
- 爬取下载网易云热门歌单的音乐
这个小程序最难的有2部分. 第一部分,爬取网易云网页源码. 在第一次通过requests请求https://music.163.com/ 发现返回的 源码和网页的源码完全不相同,然后通过查找资料,了解 ...
- Java爬虫——爬取网易云歌单音乐添加到QQ音乐
此博客仅为学习交流,如触及第三方利益,请及时联系本人删除 一.前言 看标题大家可能会有点疑惑,为什么要写这个看起来没什么作用的爬虫,两个音乐软件换着用不香吗? 基于此问题,我以我个人感受罗列了 ...
- python核心编程:大神如何用15行Python代码实现网易云热门歌单实例教程
这篇文章主要给大家介绍了关于利用15行Python代码实现网易云热门歌单的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者使用python具有一定的参考学习价值,需要的朋友们下面来一起学习学 ...
- python爬取网抑云音乐评论
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.python爬取网抑云音乐评论 前言 提示:这里可以添加本文要记录的大概内容: python爬取网抑云音乐评论 提 ...
- 【Python爬虫】爬取云班课资源,活动
CSDN不让放(因为真的很好用哈哈哈),这里放博客园链接: [Python爬虫]爬取云班课资源,活动
- linux下使用百度云以及酷我音乐
linux下使用百度云以及酷我音乐 软件包不是官方的,是第三方作者基于linux写的. 传送门:点我传送 下面来两张效果图,很简洁,这种feel很不错. 参考博客:键盘上的舞者
- Python下载网易云音乐歌单
教程(假的) b站链接: https://b23.tv/av93837599 这期视频起源于本人本地歌曲被网易云音乐删掉的悲惨经历,不管你有没有,反正我有,我以前在qq音乐下载了一首肖邦的钢琴协奏曲, ...
- 数据采集与清洗基础习题(二)Python爬虫常用模块,头歌参考答案
数据采集习题参考答案,会持续更新,点个关注防丢失.为了方便查找,已按照头歌重新排版,朋友们按照头歌所属门类查找实训哦,该篇为Python爬虫常用模块. 创作不易,一键三连给博主一个支持呗. 文章目录 ...
最新文章
- android 代码设置居右_android如何让textview文字居右
- python跟unicode一样吗_PYTHON编码处理-str与Unicode的区别
- FFT和Matlab中操作FFT
- Python编程基础:第十六节 元组Tuple
- TeeChart Pro ActiveX教程(十九):TeeChart工具集(五)
- 在Ubuntu桌面上显示我的电脑等图标
- 使用Apriori进行关联分析(一)
- 《洛克菲勒留给儿子的38封信》 第四封:现在就去做
- 11.* 指针 引用
- java研发工程师与java后端工程师有什么区别?
- 100道Java中高级面试题汇总+详细拆解
- mysql 唯一索引为null_mysql 中存在null跟空时创建唯一索引_mysql
- 晋南讲堂之持久层框架ORM简介
- win10 电脑没声音 控制面板 realtek高清晰音频管理器没有解决方案
- 一文看懂STM32单片机和51单片机区别
- 基于autojs7的皮皮虾极速版辅助
- 第二章 GD MCU程序下载
- Win10怎么删除快速访问中最近使用文件记录
- 最新推出SAP ECC EHP7最新版本IDES带演示数据,带开发ACCESS KEY。
- 疫情之下裸辞后的一些感悟和面试心得