最近开车总感觉车里的车载音乐非常的老土,现在都玩网抑云了,抽空看了一下它的页面,发现音乐好听,还可以下载,闲来无趣,写了个爬虫将榜单上所有的歌曲信息提取并分类下载了一下,效果还不错,比原来的车载音乐丰富多了!

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爬虫下载网抑云歌单音乐相关推荐

  1. 小项目实现:下载网易云某个歌单的全部音乐

    第一步:用歌曲地址先实现一首歌的下载 利用: song_url (例如:https://m701.music.126.net/20190719164713/77733e070e7f9c68ac6ea2 ...

  2. 爬取下载网易云热门歌单的音乐

    这个小程序最难的有2部分. 第一部分,爬取网易云网页源码. 在第一次通过requests请求https://music.163.com/ 发现返回的 源码和网页的源码完全不相同,然后通过查找资料,了解 ...

  3. Java爬虫——爬取网易云歌单音乐添加到QQ音乐

    此博客仅为学习交流,如触及第三方利益,请及时联系本人删除 一.前言 看标题大家可能会有点疑惑,为什么要写这个看起来没什么作用的爬虫,两个音乐软件换着用不香吗?     基于此问题,我以我个人感受罗列了 ...

  4. python核心编程:大神如何用15行Python代码实现网易云热门歌单实例教程

    这篇文章主要给大家介绍了关于利用15行Python代码实现网易云热门歌单的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者使用python具有一定的参考学习价值,需要的朋友们下面来一起学习学 ...

  5. python爬取网抑云音乐评论

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.python爬取网抑云音乐评论 前言 提示:这里可以添加本文要记录的大概内容: python爬取网抑云音乐评论 提 ...

  6. 【Python爬虫】爬取云班课资源,活动

    CSDN不让放(因为真的很好用哈哈哈),这里放博客园链接: [Python爬虫]爬取云班课资源,活动

  7. linux下使用百度云以及酷我音乐

    linux下使用百度云以及酷我音乐 软件包不是官方的,是第三方作者基于linux写的. 传送门:点我传送 下面来两张效果图,很简洁,这种feel很不错. 参考博客:键盘上的舞者

  8. Python下载网易云音乐歌单

    教程(假的) b站链接: https://b23.tv/av93837599 这期视频起源于本人本地歌曲被网易云音乐删掉的悲惨经历,不管你有没有,反正我有,我以前在qq音乐下载了一首肖邦的钢琴协奏曲, ...

  9. 数据采集与清洗基础习题(二)Python爬虫常用模块,头歌参考答案

    数据采集习题参考答案,会持续更新,点个关注防丢失.为了方便查找,已按照头歌重新排版,朋友们按照头歌所属门类查找实训哦,该篇为Python爬虫常用模块. 创作不易,一键三连给博主一个支持呗. 文章目录 ...

最新文章

  1. android 代码设置居右_android如何让textview文字居右
  2. python跟unicode一样吗_PYTHON编码处理-str与Unicode的区别
  3. FFT和Matlab中操作FFT
  4. Python编程基础:第十六节 元组Tuple
  5. TeeChart Pro ActiveX教程(十九):TeeChart工具集(五)
  6. 在Ubuntu桌面上显示我的电脑等图标
  7. 使用Apriori进行关联分析(一)
  8. 《洛克菲勒留给儿子的38封信》 第四封:现在就去做
  9. 11.* 指针 引用
  10. java研发工程师与java后端工程师有什么区别?
  11. 100道Java中高级面试题汇总+详细拆解
  12. mysql 唯一索引为null_mysql 中存在null跟空时创建唯一索引_mysql
  13. 晋南讲堂之持久层框架ORM简介
  14. win10 电脑没声音 控制面板 realtek高清晰音频管理器没有解决方案
  15. 一文看懂STM32单片机和51单片机区别
  16. 基于autojs7的皮皮虾极速版辅助
  17. 第二章 GD MCU程序下载
  18. Win10怎么删除快速访问中最近使用文件记录
  19. 最新推出SAP ECC EHP7最新版本IDES带演示数据,带开发ACCESS KEY。
  20. 疫情之下裸辞后的一些感悟和面试心得

热门文章

  1. js鼠标移入移出显示与隐藏
  2. 智能驾驶词典 --- 自动驾驶芯片梳理
  3. Smali语法详解(1)
  4. python可以制作游戏脚本吗_python制作简易阴阳师游戏脚本
  5. layui 图片上传 asmx C#
  6. 韦东山:嵌入式Linux学习路线图
  7. 推动 物联网智慧城市关键
  8. 联想小新14系列一直开机黑屏无法进入系统
  9. matlab中 4.2f,C语言编程中%4.2f是什么意思
  10. 探索React合成事件