吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 8001|回复: 26
收起左侧

[Python 转载] Python 提取QQ音乐

  [复制链接]
最后的 发表于 2018-10-26 13:23
在吾爱做了多年的伸手党,今天就把我起那几个月写了qq音乐爬虫供大家参考。{:301_1004:} {:301_1004:} {:301_1004:}
大佬不要喷。我知道有点菜。
这是重写版。以前实训时只做出来低品质的。现在把高品质的弄好了。不过还是有很多bug。因为版权的音乐下载不会有提示。直接报错。凑合凑合吧。等第二次答辩完后大概以后没机会在写Python了{:301_999:}

import random
import urllib
import urllib.request
import requests
import json

USER_AGENTS = [
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36",
"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36",
"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.26 Safari/537.36 Core/1.63.5509.400 QQBrowser/10.1.1601.400"
]

随机头

def random_header():
headers = {
"User-Agent": random.choice(USER_AGENTS)
}
return headers

搜索歌曲名

def search_music_name():
return input("请输入歌曲名:")

data_search = {
"ct": "24",
"qqmusic_ver": "1298",
"new_json": "1",
'remoteplace': 'txt.yqq.center',
"searchid": "71552798001734829",
"t": "0",
"aggr": "1",
"cr": "1",
"catZhida": "1",
"lossless": "0",
"flag_qc": "1",
"p": "1",
"n": "50",
"w": search_music_name(),
"g_tk": "5381",
"loginUin": "0",
"hostUin": "0",
"format": "jsonp",
"inCharset": " utf8",
"outCharset": " utf-8",
"notice": " 0",
'platform': 'yqq',
"needNewCode": " 0"
}
url_search = r"http://c.y.qq.com/soso/fcgi-bin/client_search_cp?"
search_api = requests.get(url_search, params=data_search, headers=random_header())
search_api = search_api.text.replace("callback(", '')[:-1]
music_info = json.loads(search_api)
music_list = music_info["data"]["song"]["list"]

获取歌曲时长

def get_sing_time(time):
m = time // 60
s = time % 60
return str(m) + ":" + str(s)

k = 0
for index in range(len(music_list)):
sing_info = music_list[index]['name']
singer_name = music_list[index]["singer"][0]["name"]
albumname = music_list[index]["album"]["name"]
sing_time = music_list[index]["interval"]
sing_time = get_sing_time(sing_time)
k += 1
print(str(k) + " : " + sing_info + "   歌手:" + singer_name + "     专辑:" + albumname + "   时长:" + sing_time)
num = int(input('请选择你要下载的歌曲:'))

songmid = music_list[num - 1]["file"]["media_mid"]
singName=music_list[num-1]["name"]
singer_name = music_list[num-1]["singer"][0]["name"]

获取真正的key

key_url = 'https://u.y.qq.com/cgi-bin/musicu.fcg?callback=getplaysongvkey626277975566637&g_tk=5381&jsonpCallback=getplaysongvkey626277975566637&loginUin=0&hostUin=0&format=jsonp&inCharset=utf8&outCharset=utf-8&notice=0&platform=yqq&needNewCode=0&data={"req":{"module":"CDN.SrfCdnDispatchServer","method":"GetCdnDispatch","param":{"guid":"552068528","calltype":0,"userip":""}},"req_0":{"module":"vkey.GetVkeyServer","method":"CgiGetVkey","param":{"guid":"552068528","songmid":["'+songmid+'"],"songtype":[0],"uin":"0","loginflag":1,"platform":"20"}},"comm":{"uin":0,"format":"json","ct":20,"cv":0}}'

key = requests.get(key_url)
key_api = key.text.replace(r"getplaysongvkey626277975566637(", "")[:-1]
key_api = json.loads(key_api)
vkey = key_api["req_0"]["data"]["midurlinfo"][0]["vkey"]
url_ape = "http://183.222.96.19/amobile.music.tc.qq.com/A000"+songmid+".ape?guid=552068528&vkey="+vkey+"&uin=0&fromtag=91&.ape"
url_flac = "http://183.222.96.19/amobile.music.tc.qq.com/F000"+songmid+".flac?guid=552068528&vkey="+vkey+"&uin=0&fromtag=91&.flac"
url_m4a = "http://dl.stream.qqmusic.qq.com/C400"+songmid+".m4a?guid=552068528&vkey="+vkey+"&uin=0&fromtag=66"

获取mp3和mpe

get_temp_url = 'https://c.y.qq.com/base/fcgi-bin/fcg_music_express_mobile3.fcg?'
temp_form = {
"g_tk": "191874193",
"loginUin": "1069486284",
"hostUin": "0",
"format": "json",
"inCharset": "utf8",
"outCharset": "utf-8",
"notice": "0",
"platform": "yqq",
"needNewCode": "0",
"cid": "205361747",
"uin": "1069486284",
"songmid": songmid,
"filename": "M500" + songmid + ".mp3",
"guid": "2057046240"
}
temp_link = requests.get(get_temp_url, params=temp_form, headers=random_header())
temp_link = temp_link.json()
temp_link = temp_link["data"]["items"][0]
url_mp3 = "http://dl.stream.qqmusic.qq.com/" + temp_link["filename"] + "?guid=2057046240&vkey=" + temp_link[
"vkey"] + "&uin=0&fromtag=88"
print("1.flac:     "+url_flac)
print("2.ape:      "+url_ape)
print("3.mp3:      "+url_mp3)
print("4.m4a:      "+url_m4a)

choice={
"1":url_flac,
"2":url_ape,
"3":url_mp3,
"4":url_m4a
}
type={
"1": ".flac",
"2": ".ape",
"3": ".mp3",
"4": ".m4a"
}
n = int(input('请选择:'))

print(choice[str(n)])
try:
urllib.request.urlretrieve(choice[str(n)],singName+"-"+singer_name+type[str(n)])
print("下载完成")
except:
print("下载失败")



伪新人第一次发帖,请多关照一下。(这个我在github上发过,忘了在这里发了。补上)

免费评分

参与人数 3吾爱币 +5 热心值 +2 收起 理由
xuujii + 1 热心回复!
liuxia + 1 + 1 热心回复!
wushaominkk + 3 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

carcer 发表于 2018-10-26 13:54
同为半个伸手党的我,要向你学习啊,不错不错
我的暖梦少年 发表于 2018-10-26 14:04
祭司 发表于 2018-10-26 14:07
坐久落花多 发表于 2018-10-26 14:11
期待发在线工具版。。。
live4liberty 发表于 2018-10-26 14:12
大佬是我学习的楷模
wellenso 发表于 2018-10-26 16:16
还不错,谢谢分享!!!
一个用户名 发表于 2018-10-26 19:35 来自手机
向大佬学习!
打酱油。 发表于 2018-10-26 21:42
作为一个真正的伸手党,表示需要py文件。
galaxyone 发表于 2018-10-26 22:00 来自手机
感谢分享,谢谢大佬
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-16 03:19

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表