python3 爬去QQ音乐

摘要:
1导入请求2导入3导入4导入5678错误名称(歌手):9url='https://c.y.qq.com/soso/fcgi-bin/client_search_cp“10参数={11’atZhida‘:‘1’,12’w':歌手,13}14标题={15’ferer‘:‘http://y
  1 import requests
  2 import re
  3 import json
  4 import os
  5 
  6 
  7 
  8 def get_name(singer):
  9     url = 'https://c.y.qq.com/soso/fcgi-bin/client_search_cp'
 10     params = {
 11         'catZhida': '1',
 12         'w': singer,
 13     }
 14     headers = {
 15         'referer': 'https://y.qq.com/portal/search.html',
 16         'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36'
 17     }
 18     html = requests.get(url,headers=headers,params=params).text
 19     content = re.compile('callback((.*))').findall(html)[0]
 20     content = json.loads(content)
 21     data = content.get('data')
 22     song = data.get('song')
 23     lists = song.get('list')
 24     name = []
 25     for list in lists:
 26         singer = list.get('singer')[0].get('mid')
 27         name.append(singer)
 28     name = name[0]
 29     return name
 30 
 31 def get_html(name,singer):
 32     url = 'https://c.y.qq.com/v8/fcg-bin/fcg_v8_singer_track_cp.fcg'
 33     params = {
 34         'singermid': name,
 35         'order': 'listen',
 36         'begin': '0',
 37         'num': '30',
 38     }
 39     headers = {
 40         'referer': 'https://y.qq.com/n/yqq/singer/003aQYLo2x8izP.html',
 41         'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36'
 42     }
 43     html = requests.get(url,headers=headers,params=params).text
 44     return html
 45 
 46 
 47 def get_music(vkey,songname,filename,singer):
 48     if vkey and songname:
 49         url3 = 'http://dl.stream.qqmusic.qq.com/' + filename + '?vkey=' + vkey + '&guid=7133372870&uin=0&fromtag=66'
 50 
 51         headers = {
 52             'referer': 'https://y.qq.com/n/yqq/singer/003aQYLo2x8izP.html',
 53             'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36'
 54         }
 55         music = requests.get(url3,headers=headers).content
 56         dir = singer
 57         if  not os.path.exists(dir):
 58             os.mkdir(dir)
 59         with open(dir+'/'+songname+'.m4a','wb') as f:
 60             f.write(music)
 61         print(songname,'__',singer)
 62 
 63 def get_vkey(strMediaMid,songmid,songname,singer):
 64     if strMediaMid and songmid and songname :
 65         url2 = 'https://c.y.qq.com/base/fcgi-bin/fcg_music_express_mobile3.fcg'
 66         params = {
 67             'g_tk': '5381',
 68             'jsonpCallback': 'MusicJsonCallback8571665793949388',
 69             'loginUin': '0',
 70             'hostUin': '0',
 71             'format': 'json',
 72             'inCharset': 'utf8',
 73             'outCharset': 'utf-8',
 74             'notice': '0',
 75             'platform': 'yqq',
 76             'needNewCode': '0',
 77             'cid': '205361747',
 78             'callback': 'MusicJsonCallback8571665793949388',
 79             'uin': '0',
 80             'songmid': songmid,
 81             'filename': 'C400'+ strMediaMid + '.m4a',
 82             'guid': '7133372870'
 83         }
 84         headers = {
 85             'referer': 'https://y.qq.com/portal/player.html',
 86             'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36'
 87         }
 88         detail_html = requests.get(url2,headers=headers,params=params).text
 89         vkey_disc = re.compile('MusicJsonCallback8571665793949388((.*?))').findall(detail_html)[0]
 90         vkey_disc = json.loads(vkey_disc)
 91 
 92         data = vkey_disc['data']
 93         items = data.get('items')[0]
 94         vkey = items.get('vkey')
 95         get_music(vkey,songname,'C400'+ strMediaMid + '.m4a',singer)
 96 
 97 
 98 def get_list(detail_html,singer):
 99     if detail_html:
100         lists = re.compile('data":{"list":(.*?),"singer_id',re.S).findall(detail_html)[0]
101         datas = json.loads(lists)
102         for data in datas:
103             musicData = data.get('musicData')
104             strMediaMid = musicData.get('strMediaMid')
105             songmid = musicData.get('songmid')
106             songname = musicData.get('songname')
107             get_vkey(strMediaMid,songmid,songname,singer)
108 
109 
110 
111 def main():
112     singer = input('请输入您想要下载的歌手:')
113     name = get_name(singer)
114     detail_html = get_html(name,singer)
115     get_list(detail_html,singer)
116 
117 if __name__ == '__main__':
118     main()

有些地方代码有些冗余,还可以再改进  但是费了些功夫终于爬出的效果 确实想要快点编辑出来  按耐不住小激动  这应该就是敲代码的乐趣

python3 爬去QQ音乐第1张

当播放一个音乐的时候  在Elements中 可以看到音乐的链接  当然是通过js 和 css 加载过的   但是 可以用逆向思维进行参数的找寻  

http://dl.stream.qqmusic.qq.com/C4000032qfIn1Tzdbq.m4a?vkey=80525033DD719DAB87C0CEC7B4F9F40D8755982D3A495E3BA0810E50A89668A2AFD61C4C19876FD0FB68932DED89B340AE9F4F464D82DC15&guid=7133372870&uin=0&fromtag=66

发现  vkey 是一个很重要的参数  所以就先去翻一翻网页查一下vkey在哪   

python3 爬去QQ音乐第2张

 经发现 在同播放页面的JS中   但是如果想获得vkey 就需要访问这个对应的URL  也要找到相应的参数

python3 爬去QQ音乐第3张

标红箭头的是一直在变化而且没有不行的参数  

 所以将继续往里使劲挖!

python3 爬去QQ音乐第4张

 目前处于列表页  发现参数已经浮现

但发现第一个红箭头是歌手的意思  被不知道用了什么样的格式换了一种形式  因为后续还想通过段小乱码找到每个歌手所对应的歌曲 所以 还是找到每个歌手所对应的小乱码比较好 

python3 爬去QQ音乐第5张

 找到了!!!

但是 写代码的话 要用正向思维来写  Year!

免责声明:文章转载自《python3 爬去QQ音乐》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇资源分享-jira jql的常规用法Mysql:语法:自增列下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Smarty 函数

html_checkboxes 自定义函数 html_checkboxes 根据给定的数据创建复选按钮组. 该函数可以指定哪些元素被选定. 要么必须指定 values 和 ouput 属性,要么指定 options 替代. 所有的输出与 XHTML 兼容 html_checkbox用来用给定的数据创建checkbox。name表示checkbox的...

Flex编码过程

Flex编码过程 当我们开发一个Flex程序,我们重复其他类型网络程序的过程,例如HTML,JSP,ASP和CFML。创建一个有用的Flex程序是很容易的:打开我们最喜欢的文本编辑器,例如Flex Builder,输入XML标签,编译成为SWF文件,部署SWF文件,从网络浏览器中请求SWF文件的地址。与静态的页面或是由JSP,ASP或是CFML创建的HT...

【转】java异常报错大全

算术异常类:ArithmeticExecption 空指针异常类:NullPointerException 类型强制转换异常:ClassCastException 数组负下标异常:NegativeArrayException 数组下标越界异常:ArrayIndexOutOfBoundsException 违背安全原则异常:SecturityExceptio...

Ubuntu Error: No module named 'apt_pkg' 怎么办?

版权声明:任何博客都可以转载,但必须标注来源 https://blog.csdn.net/nikoong/article/details/79612615 ubuntu经常用要添加PPA源,就是使用如下命令: sudo add-apt-repository ppa:XXX 但不知什么时候开始,就出现了错误Error: No module named '...

Django(一):从socket到MVC

一、socket的http套路 web应用本质上是一个socket服务端,用户的浏览器是一个socket客户端。socket处在应用层与传输层之间,是操作系统中I/O系统的延伸部分(接口),负责系统进程和应用之间的通信。 HTTP协议又称超文本传输协议。 1 //浏览器发送一个HTTP请求; 2 //服务器收到请求,根据请求信息,进行函数处理,生成一个H...

Linux下安装Python3.x和第三方库

如果本机安装了python2,尽量不要管他,使用python3运行python脚本就好,因为可能有程序依赖目前的python2环境, 比如yum!!!!! 不要动现有的python2环境! 不要动现有的python2环境! 不要动现有的python2环境! 重要的使用说三遍! 一、安装python3.6 1. 安装依赖环境 #yum -y install...