描述

可以下载QQ音乐免费音乐和绿钻音乐,但是不能下载付费音乐。
运行程序后会在同级目录自动创建名为:歌曲下载的文件夹,下载的文件将被放置在此文件夹
如果下载的文件大小为1KB,则表示下载失败,这首歌不支持下载

源代码如下:

# -*- coding: utf-8 -*-
import json
import os
import requestsheaders = {'Origin': 'https://y.qq.com','Referer': 'https://y.qq.com/portal/search.html','Sec-Fetch-Mode': 'cors','User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36'
}def get_music_info():music_info_list = []name = input('请输入歌手或歌曲:')  # input函数 输入 做用户交互 使用的page = input('请输入页码:')num = input('请输入当前页码需要返回的数据条数:')url = f'https://c.y.qq.com/soso/fcgi-bin/client_search_cp?p={page}&n={num}&w={name}'response = requests.get(url).text  # 获取到的是字符串# 将response切分成json格式 类似字典 但是现在还是字符串music_json = response[9:-1]# json转字典music_data = json.loads(music_json)  # 转换成 字典# print(music_data)music_list = music_data['data']['song']['list']for music in music_list:music_name = music['songname']  # 歌曲的名字singer_name = music['singer'][0]['name']  # 歌手的名字songmid = music['songmid']media_mid = music['media_mid']music_info_list.append((music_name, singer_name, songmid, media_mid))return music_info_list# 获取vkey
def get_purl(music_info_list):music_data = []for music in music_info_list:music_name = music[0]singer_name = music[1]songmid = music[2]url = 'https://u.y.qq.com/cgi-bin/musicu.fcg?data={"req":{"module":"CDN.SrfCdnDispatchServer","method":"GetCdnDispatch","param":{"guid":"8846039534","calltype":0,"userip":""}},"req_0":{"module":"vkey.GetVkeyServer","method":"CgiGetVkey","param":{"guid":"8846039534","songmid":["%s"],"songtype":[0],"uin":"1152921504784213523","loginflag":1,"platform":"20"}},"comm":{"uin":"1152921504784213523","format":"json","ct":24,"cv":0}}' % songmidresponse = requests.get(url).json()  # 如果你获取的数据 是 {}  .json() 他会直接帮我们转换成字典purl = response['req_0']['data']['midurlinfo'][0]['purl']full_media_url = 'http://dl.stream.qqmusic.qq.com/' + purlmusic_data.append({'music_name': music_name,'singer_name': singer_name,'full_media_url': full_media_url})return music_datadef save_music_mp3(music_data):if not os.path.exists('歌曲下载'):  # 判断是否有歌曲下载文件夹os.mkdir('歌曲下载')  # 如果没有创建 歌曲下载文件夹for music in music_data:music_name = music['music_name']singer_name = music['singer_name']full_url = music['full_media_url']music_response = requests.get(full_url, headers=headers).contentwith open('歌曲下载/%s-%s.mp3' % (music_name, singer_name), 'wb')as fp:fp.write(music_response)print('[%s]保存成功!' % music_name)if __name__ == '__main__':music_info_list = get_music_info()music_data = get_purl(music_info_list)save_music_mp3(music_data)

运行结果:



python爬虫:爬取QQ音乐歌曲相关推荐

  1. python爬虫爬取qq音乐热歌榜的歌曲到本地

    文章目录 项目目标 具体实现步骤 完整代码 运行结果 项目目标 爬取qq音乐热歌榜https://y.qq.com/n/yqq/toplist/26.html到本地文件夹 具体实现步骤 程序思路:用s ...

  2. 【Python爬虫实战】使用Selenium爬取QQ音乐歌曲及评论信息

    本文对使用到的技术仅做简单的介绍,若想了解更多,请前往相应的官网网站进行学习. 本文适合对爬虫相关知识接触不多的新手,主要是普及Selenium如何做爬虫,大佬请跳过. 1.Selenium简单介绍 ...

  3. python爬取qq音乐歌曲链接为什么播放不出来_手把手教你使用Python抓取QQ音乐数据(第一弹)...

    原标题:手把手教你使用Python抓取QQ音乐数据(第一弹) [一.项目目标] 获取 QQ 音乐指定歌手单曲排行指定页数的歌曲的歌名.专辑名.播放链接. 由浅入深,层层递进,非常适合刚入门的同学练手. ...

  4. python爬虫爬取qq空间说说_用python爬取qq空间说说

    环境:PyCharm+Chorme+MongoDB Window10 爬虫爬取数据的过程,也类似于普通用户打开网页的过程.所以当我们想要打开浏览器去获取好友空间的时候必定会要求进行登录,接着再是查看说 ...

  5. python批量爬取QQ音乐歌手的歌曲等信息

    import requests,openpyxl #导入模块 wb=openpyxl.Workbook() #创建工作薄 sheet=wb.active #获取工作薄的活动表 sheet.title= ...

  6. [python爬虫]--爬取豆瓣音乐topX

    最近在学习python爬虫,写出来的一些爬虫记录在csdn博客里,同时备份一个放在了github上. github地址:https://github.com/wjsaya/python_spider_ ...

  7. 如何用python爬虫爬取qq空间说说

    之前学了下爬虫一直就想爬一下QQ空间 在爬取之前需要做的准备工作 安装python3 需要的库: re 正则 selenium 需要安装 chrome 或者 Firefox 还有他们的模拟 Chrom ...

  8. Python爬虫实战之爬取百度音乐歌曲

    Python爬虫爬取百度音乐歌曲 整体思路如下: 1.搜索:通过搜索界面输入歌手名字找到歌手的歌曲信息.千千音乐:网址 2.找到歌曲信息:通过遍历歌曲列表信息界面获取每个歌曲的ID,以及歌曲的总数 3 ...

  9. python爬虫爬取音乐单曲_Python爬取qq音乐的过程实例

    一.前言 qq music上的音乐还是不少的,有些时候想要下载好听的音乐,但有每次在网页下载都是烦人的登录什么的.于是,来了个qqmusic的爬虫.至少我觉得for循环爬虫,最核心的应该就是找到待爬元 ...

最新文章

  1. 45本互联网圣经级别书籍!包邮送到家!一书在手,天下我有!
  2. Oracle-UNDO表空间解读
  3. python3精要(3)-python对象类型,数字,序列
  4. ClassPathScanningCandidateComponentProvider 扫描给定包及其子包的类
  5. recovery编译问题汇总
  6. 【总结】Oracle sql 中的字符(串)替换与转换
  7. c语言打程序时会遇到什么问题,Sublime text3 实现C语言编译运行以及过程中可能遇到的问题...
  8. ArcGIS中,一个点集里的点两两连线,比如有4个点,就连6条线
  9. 数据库工作笔记016---SqlServer2016_日期处理_ntext和text区别_开启远程连接_查看系统COm组件_Browser服务无法启动_导出数据_字符串前加N
  10. 多线程中,NSOperationQueue和GCD的区别
  11. 闭包的理解、缺点以及应用场景
  12. Knockout获取数组元素索引的2种方法,在MVC中实现
  13. T-SQL语言(一)
  14. ping IP简单应用,查找故障
  15. sqlserver express版PRIMARY 大小不能超过4G
  16. 2019美赛b题:基于Weighted-K-means聚类模型的选址
  17. AutoCAD_FILEDIA
  18. html为知笔记模板,为知笔记,模板制作.doc
  19. sed搜索某行在行末追加_sed在行首或者行尾添加内容
  20. 使用HttpClient下载网页

热门文章

  1. 基于业务流程的信息化建设与应用
  2. 产品级项目---智能随访系统
  3. Go的研习笔记-day13(以Java的视角学习Go)
  4. ORA-00392: log 4 of thread 2 is being cleared, operation not allowed
  5. 副业兼职: 在家就可以做的兼职项目推荐
  6. JS转换为数字的方法Number()、parseInt()和 parseFloat()
  7. 【深度解刨C语言】符号篇(全)
  8. ccc-数据科学库(HM)-day2
  9. 百度7天GNN学习-图与图学习中
  10. [Canvas绘图] 第09节 迷图档案