python实现某网站的音乐下载

article/2025/9/14 6:43:53

写在前面:首先,理论上讲,如果歌曲可以在网页上播放,那么一定有网址(source src)保存着歌曲的源文件。那么利用火狐(或者谷歌)浏览器的F12功能,就可以快速提取出该source src,进而完成歌曲下载了。基于上述操作,我就想到了用python把如前所述封装起来,输入歌曲名称进行选择进而完成下载。

1. 前期准备

  • 开发环境:win10 + py3.5(即windows + py3.x)

  • 需要安装的库:requests 和 selenium(具体安装方法网上有很多,这里不再赘述。其中关于selenium的教程建议参考虫师的《selenium2 python自动化测试》)

  • ps. 这里的某网站指的是QQ音乐,当然酷狗音乐原理相同。网易云会涉及到更加复杂的跳转,由于没有学过前端,暂时无法处理。。。

2. 具体步骤

2.1 网址定位

打开QQ音乐,使用“搜索”按钮进行搜索后(以搜索-崇拜-为例),得到的结果为:

搜索网址

从图中复制可以得到歌曲搜索网址如下:

https://y.qq.com/portal/search.html#page=1&searchid=1&remoteplace=txt.yqq.top&t=song&w=%E5%B4%87%E6%8B%9C

注意:上述网址中的%E5%B4%87%E6%8B%9C是“崇拜”的HTML可识别编码形式。

接下来我们使用requests.get(url)就可以得到页面内容了,让我们看一下结果:

# coding:utf-8
# 测试返回结果import requests
import urllib.requestheaders = {'Host': 'y.qq.com','User-Agent': '', # 这个大家用自己的就好'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8','Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3','Accept-Encoding': 'gzip, deflate, br','Referer': 'http://y.qq.com/','Connection': 'keep-alive','Cache-Control': 'max-age=0',}
MusicName = "崇拜"  # 测试用例
urlMusicName = urllib.parse.quote(MusicName)  # 转换成url可以读取的字符串url = "https://y.qq.com/portal/search.html#page=1&searchid=1&remoteplace=txt.yqq.top&t=song&w=" + urlMusicName
response = requests.get(url, headers = headers)
print(response.text)

运行上述代码,打印结果如下所示:

第一次打印结果图

由于结果太长,这里我们截取一部分观察。发现结果中出现很多乱码,原来是缺失对response编码的结果。在上述代码中进行修改:

    response = requests.get(url, headers = headers)response.encoding = 'utf-8'   # 对结果进行utf-8编码

此时再重新打印,就可以显示中文了!

但是我们会发现,在返回的结果中,并没有显示出歌曲列表,这是为什么呢?

对比一下原网页的F12结果和返回结果我们发现,在原网页中,歌曲列表是存在在这个div里的:

<div class="js_search_tab_cont" id="song_box" style="display: block;">

但是在返回结果中,该div标签的显示为:

<div class="js_search_tab_cont" id="song_box"></div>

内容为空!这也就解释了为什么我们无法得到歌曲列表了,因为根本没有加载出来。

为了进一步解释这个问题,我们需要做以下几件事:

  1. 打开火狐浏览器(因为我selenium用的火狐,所以这里都是使用火狐浏览器,当然使用谷歌也完全没有问题~~),在地址栏中输入about:config,进入浏览器设置页面。

  2. 在页面中输入javascript.enabled,找到后 鼠标右键-切换。

  3. 这样我们就将浏览器的javascript关掉了。

  4. 关掉之后再重新加载原搜索网页,可以发现歌曲列表不见了。

通过上述操作,我们已经弄明白原因,那就是该歌曲列表是通过JavaScript进行加载,而非静态网页,也因此,我们使用静态网页方法进行获取时,是得不到加载后的歌曲列表的。

为了解决上述问题,也查看了不少方法,觉得说的比较全面在这里:传送门-知乎

最后,我选择了一种最不智能的方法,就是—暗中观察。

继续F12,网络–JS–“clint_search”找到了js跳转的真正网址,具体如图:

暗中观察

这样就完成了请求网址的定位,万里长征走完第一步~

2.2 歌曲列表打印

可能有同学要问了,为什么我们要去定位上述网址呢,上述网址打开之后是什么样子呢?

网址打开

乱乱的,像json。为了方便阅读,这里直接使用火狐自带的阅读模式,就是上图中红色框中的button,点击,继续观察:

阅读模式

注意图中红色框出的部分,“media_mid”,“name”,“title”。后面两个很好解释,那么第一个是做什么用的呢?

在歌曲列表网页中随便点击一首歌曲,可以发现其跳转后的URL为:

https://y.qq.com/n/yqq/song/003JlYgD1SvCYe.html

后面这一长串就是media_mid,原来它是用来定位歌曲的。

具体如何从json中查找出全部有用信息,这就涉及到了python 正则匹配的问题,建议大家自行学习,这里匹配不难,注意细节即可!

将全部有用信息提取出来后,存入字典,并打印在屏幕上,这样就可以自己选择想下载的歌曲了。

歌曲列表打印

其中,字符串的对齐需要注意一下。因为包含中文和标点符号,因此直接使用`”%-10s”等python自带的对齐方式是不行的,需要重新写对齐函数,我参考了这里中文字符对齐-传送门,并进行了部分修改,得到字符对齐函数如下:

# ================中文检测函数====================
# 参考网址:http://lib.csdn.net/article/python/66507?knId=160
def findChinese(source):# text = source.decode('utf8')   # python3 默认为unicoder = re.findall('[\u4e00-\u9fa5]', source)# 去除空格影响condition = lambda t: t != ' 'results = list(filter(condition, r))return results# ===============填充字符函数======================
# 参考网址:http://lib.csdn.net/article/python/66507?knId=160
# 输入变量说明:
# un_align_str: 输入字符串
# lenh: 半角字符个数;自己设置;默认为0
# lenf: 全角字符个数;自己设置;默认为0
# addh: 半角字符空格
# addf: 全角字符空格
def myAlign(un_align_str, lenh = 0, lenf = 0, addh = ' ', addf = u' '):assert isinstance(lenh, int)   # 断言半角长度为整形变量assert isinstance(lenf, int)   # 断言全角长度为整形变量slen = len(un_align_str)# 中文在默认的utf-8编码下显示占用约2个字符chn = findChinese(un_align_str)numchn = len(chn)numspn = slen - numchnstr = addh * (lenh - numspn) + addf * (lenf - 2 * numchn)return str

OK,完成歌曲列表打印!

2.3 链接跳转与歌曲下载

我们发现,当我们点击歌曲的-播放-按钮时,实际上完成的是一次网页跳转(jump~jump~)

跳转

对于这种类似于人的操作,我们可以使用selenium来进行模拟。

具体过程也可以描述成如下步骤:

  1. 定位“播放”按钮

  2. 模拟鼠标左键单击操作

  3. 读取跳转后的网页,查找source src

由于页面加载需要时间,这里我直接使用的是time.sleep()函数来进行等待,另外针对多窗口之间的跳转,selenium也给出了API,那就是driver.window_handles

在这里,需要利用time.sleep()等待句柄加载完成,否则会出现无法读取的情况,因此我用了如下判断语句进行处理

    count = 0allhandles = driver.window_handlesfor handle in allhandles:count += 1if count == 2:driver.switch_to_window(driver.window_handles[1])else:time.sleep(5)driver.switch_to_window(driver.window_handles[1])

有了当前driver,我们就可以读取driver.page_source,正则匹配出source src,然后利用requests.get(url).content完成歌曲下载啦!

3. 相关源码

源码已经上传,大家可以自行下载:QQ音乐下载器源码。


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

相关文章

新版音乐网站源码

介绍&#xff1a; 我们需要的东西有&#xff1a;主机、域名 1.获得一个虚拟主机 2.注册一个二级域名 3.解析二级域名并在主机绑定域名 3.主机文件管理器上传源码并解压 4.访问绑定域名即可搭建完成 网盘下载地址&#xff1a; https://zijiewangpan.com/Wqg4Bp53v4d 图片&…

免费搭建一个云音乐网站

如何免费搭建一个云音乐网站 搭建一个云音乐网站&#xff0c;有这些东西是必需的&#xff1a; 1&#xff1a;网站源码 2&#xff1a;服务器 3&#xff1a;域名 云音乐源码在这&#xff1a;https://www.lanzous.com/i5i1fwb 然后服务器我这里选择一个虚拟主机&#xff0c;有一些…

小说项目运营快速赚钱的方法技巧都在这里了!

站在时代的风口上&#xff0c;一头猪都可以飞起来&#xff0c;不同的时期有不同的红利项目&#xff0c;有些人还没了解&#xff0c;项目就已经黄了。 小说项目只会是玩法越来越升级赚钱&#xff0c;要抓住用户心理&#xff0c;才不会被淘汰。 今天就来跟大家分享一些小说项目…

我靠“读书笔记”闷声赚3万:那些你看不上的行业,往往最赚钱

全世界只有3.14 % 的人关注了 爆炸吧知识 你有没有计算过&#xff1a;你的时间&#xff0c;值多少钱&#xff1f; 如果你月薪5000&#xff0c;一个月工作20天&#xff0c;每天8小时&#xff0c;那么你1小时的价值就是32元。 然而&#xff0c;现在请一个打扫卫生的钟点工&#x…

投入不到3000,我用小说3年赚了100万,究竟是怎么做到的?

投入不到3000&#xff0c;我用小说3年赚了100万&#xff0c;究竟是怎么做到的&#xff1f; 本人17年负债25w&#xff0c;18年用了半年还清&#xff0c;如今3年小有富余&#xff0c;全靠下面这个&#xff08;当时是副业做起&#xff09;。 但我还是要实际的告诉大家&#xff0c;…

【软件分享】阅读APP:免费开源无广告、全网小说免费看(附2613个书源)

软件简介 阅读APP是github上gedoor大佬使用Kotlin开发的一款网络阅读软件&#xff0c;没错这个软件的名字就叫【阅读】。该软件免费、开源、无广告&#xff0c;支持定义书源&#xff0c;全网小说免费看。网络阅读用这一个就够了。目前仅支持安卓系统。 下载地址 官网地址&…

一个上班可以偷偷看小说的阅读器

推荐一款很棒的电脑上看小说阅读器。我用过的最好的看小说软件&#xff0c;调整透明度&#xff0c;自动隐藏&#xff0c;很强大很好用。可调整透明背景&#xff0c;上班偷看小说&#xff0c;老板不会发现&#xff0c;鼠标放上去就有&#xff0c;移开就消失&#xff0c;就是阅读…

项目揭秘:公众号小说赚钱与推广的暴利玩法(干货)

说到网络小说&#xff0c;大部分人并不陌生&#xff0c;追小说如同追剧一样&#xff0c;多看一眼就停不下来。正是因为人的这种好奇心理&#xff0c;加上合理的分销机制&#xff0c;才衍生出了“公众号小说”项目。 有一群这样的公众号&#xff0c;你可能会从各种不同的渠道关注…

小说推文能做吗?怎么做?小说推文真的能赚钱吗?

科思创业汇 大家好&#xff0c;这里是科思创业汇&#xff0c;一个轻资产创业孵化平台。赚钱的方式有很多种&#xff0c;我希望在科思创业汇能够给你带来最快乐的那一种&#xff01; 近来突然有很多合作伙伴问我&#xff0c;小说推广还能做吗&#xff1f; 在此统一回复&#…

揭秘:网赚圈很红的“小说项目”!月入十万的裂变套路

近几年,在网赚圈,刮起了一阵“小说cps项目”的热潮。各大自媒体平台、公众号、个人号都在宣传操作小说派单项目,可实现暴利收入,月入几万甚至十几万!真的有那么暴利?为何那么多公众号,如此大力宣传,到底是什么套路? 诱惑性标题 很多人都会遇到这种公众号,专门推这种…

小说分销运营赚不赚钱就在这3个问题了!

关于创业&#xff0c;总有人在想&#xff0c;以后能不能做起来还是个未知数&#xff0c;就一直在观望&#xff0c;然而最后往往是连末班车都赶不上。 下面跟大家分享一下小说分销运营要注意的三个问题。 一、清晰的产品定位 小说项目是以优质作品为竞争力&#xff0c;当年的起…

程序员写书到底赚钱吗

时隔半年&#xff0c;昨天又收到了出版社一笔稿费&#xff0c;时间很突然&#xff0c;金额也很突然。 年前的时候松哥发了一篇文章&#xff0c;说新书交稿后入手了一台 MacBook Pro&#xff08;MacBook Pro 入手一年了&#xff0c;到底香不香&#xff1f;&#xff09;&#xf…

测试流程简述

测试流程 整体流程如下&#xff1a; 需求评审&#xff08;功能需求、性能需求、接口需求&#xff09; 测试计划 测试用例 用例评审 测试环境搭建&#xff08;平台、架构、web服务器、数据库&#xff09; 执行用例 缺陷记录 缺陷跟踪和回归测试 测试报告 测试计划 测试计划&a…

功能测试流程规范建设

测试规范 测试规范&#xff0c;网上随便一搜&#xff0c;都是一堆堆的范文&#xff0c;其实规范也是因人而定&#xff0c;每个人的规范或者依据项目或者部门&#xff0c;需要有特殊性&#xff0c;不过虽然可以定制部分&#xff0c;但是大体还是有很多相似之处&#xff0c;下面这…

性能测试的具体流程

文章目录 1. 确定性能测试目标及指标2. 设计测试场景3. 配置测试环境4. 编写测试脚本5. 进行性能测试6. 分析测试结果7. 提出优化建议8. 进行反复测试和调整 以下是一个基本的性能测试过程&#xff0c;旨在帮助了解性能测试的具体流程和步骤。 1. 确定性能测试目标及指标 首先…

软件功能测试的测试流程有哪些?

软件功能测试就是对产品的各功能进行验证&#xff0c;根据功能测试用例&#xff0c;逐项测试&#xff0c;检查产品是否达到用户要求的功能。软件产品的功能直接影响到用户体验&#xff0c;所以软件功能测试意义重大。 软件功能测试的测试流程 1、测试计划&#xff1a;测试计划…

【软件测试】功能测试的测试工作流程

按照产出的文档&#xff0c;介绍项目开发过程中的工作步骤 一、测试计划&#xff1a;这个计划&#xff0c;我个人觉得应该在详细设计确定后&#xff0c;代码开始编写的时候进行制定&#xff0c;因为我是“提早开始测试工作”思路的忠实fans. a) 测试计划&#xff0c;主要是给…

产品测试流程

一、安装卸载测试 在不同手机系统环境下是否能完整操作安装和卸载。 二、UI测试 1、测试用户界面&#xff08;如菜单、对话、窗口和其他控件&#xff09;布局、风格是否满足客户要求&#xff1b;文字是否正确、页面是否美观、图片组合是否完整、操作是否友好。 2、UI测试目标…

功能测试的工作流程

测试工作人员接收到项目需求、验收标准和原型图并对需求进行分析以了解项目的需求。 一、测试计划&#xff1a;个人觉得测试计划应在在详细设计确认后&#xff0c;代码开始编写的时候开始编写。测试计划主要给后面的测试工作的一些指南。 其内容包含&#xff1a; 1、测试团队人…

功能测试基础之业务流程测试

功能测试基础之业务流程测试 文章目录 功能测试基础之业务流程测试前言一、面向结构分析定义实例分析 二、面向过程分析定义面向过程分析过程与步骤主事件流和备选事件流说明实例分析 三、面向角色分析定义测试注意事项怎样分析系统中的角色实例分析&#xff08;以一个流程为例…