【QQ Music Downloader】

Todos son responsables de apoyar


Requisitos del proyecto

① Simule las funciones de búsqueda y descarga en la página web de música QQ:

  • Ingrese el artista o el título de la canción para buscar la lista de canciones relacionadas y luego, opcionalmente, descargue.
  • Puedes descargar canciones localmente. El método de denominación para descargar al local es: nombre de la canción + cantante + id.

Primero, vaya a QQ Music para encontrar la interfaz de descarga de audio:

Buscar aleatoriamente una canción:

Luego abra las herramientas de desarrollador del navegador Chrome y haga clic para reproducir la canción:

Luego, busque el archivo de tipo de medios. Obviamente, la música que queremos es el archivo más grande. Haga clic en él:

Abre esta URL:

Hasta ahora, hemos encontrado con éxito la interfaz de descarga de audio de la música QQ.


Segundo, analice la interfaz de descarga de música:

https://isure.stream.qqmusic.qq.com/C400003y3tQK2JZaau.m4a?
GUID = 4441071008 y
tecla v = 6A1D99170713A9FFA58B61103D38450398E41C3ACDABF3F3E6FF170FB936B9239C1412F189015FE08484D930C1F11B39CD37EA7443CFC395 y
uin = 0 &
fromtag = 66

Analicemos esta canción primero songmid参数:

Podemos ver la canción songmid参数Shi 003y3tQK2JZaau, es la URL de C400las siguientes secciones.

songmidDesde el punto de vista del nombre, es el identificador único de la canción.

Los parámetros restantes se pueden encontrar en el archivo de audio:


3. A continuación, analice la interfaz de búsqueda:

Abra el cuadro de búsqueda, ingrese el nombre de la canción e intercepte la solicitud de búsqueda:

A continuación, decodifique la URL:

Analice los parámetros en la URL para eliminar algunos parámetros innecesarios:

https://cyqq.com/soso/fcgi-bin/client_search_cp?
ct = 24 &
qqmusic_ver = 1298 &
new_json = 1 &
remoteplace = txt.yqq.top &
searchid = 35829660933924128 &
t = 0 &
aggr = 1 &
cr = 1 &
catZhida = 1 &
lossless = 0 &
flag_qc = 0 &
p = 1 &
n = 10 &
w = 你 要 相信 相信最后 一天 &
g_tk_new_20200303 = 1944343149 &
g_tk = 1944343149 &
loginUin = 0 &
hostUin = 0 &
format = json &
inCharset = utf8 &
outCharset = utf-8 &
notice = 0 &
platform = yqq.json &
needNewCode = 0

La palabra clave buscada aquí es w参数.

Después de eliminar parámetros innecesarios, como sigue:

https://cyqq.com/soso/fcgi-bin/client_search_cp?&t=0&aggr=1&cr=1&catZhida=1&lossless=0&flag_qc=0&p=1&n=10&w=歌曲或歌手名称


Cuarto, extraer información a través de la interfaz de búsqueda:

import requests
import json

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'}

url = 'https://c.y.qq.com/soso/fcgi-bin/client_search_cp?&t=0&aggr=1&cr=1&catZhida=1&lossless=0&flag_qc=0&p=1&n=20&w=你要相信这不是最后一天'

response = requests.get(url, headers=headers)

js1 = json.loads(response.text.strip('callback()'))
js1 = js1['data']['song']['list']

print(js1)

Salida:

De esta manera, extrajimos con éxito la información de la canción.

Luego construya la lista y guarde la información relevante:

medias = []
song_mid = []
src = []
song_names = []
singers = []

for rest in js1:
    medias.append(rest['media_mid'])
    song_mid.append(rest['songmid'])
    song_names.append(rest['songname'])
    singers.append(rest['singer'][0]['name'])

Pero acabamos de extraerlo de aquí songmid参数. Si quieres descargar la canción, tienes que extraerla vkey参数.


5. Obtenga los parámetros vkey a través de la interfaz de descarga:

https://cyqq.com/base/fcgi-bin/fcg_music_express_mobile3.fcg?&jsonpCallback=MusicJsonCallback&cid=205361747&songmid=

A través de esta interfaz, podemos obtener vkey参数:

for n in range(0, len(medias)):
    url2 = 'https://c.y.qq.com/base/fcgi-bin/fcg_music_express_mobile3.fcg?&jsonpCallback=MusicJsonCallback&cid=205361747&songmid=' + song_mid[n] + '&filename=C400' + medias[n] + '.m4a&guid=4441071008'
    rest2 = get_request(url2)
    # print(rest2.text)
    js2 = json.loads(rest2.text)
    print(js2)

Inserte la descripción de la imagen aquí


Seis, descargue canciones a través de la interfaz de descarga:

for n in range(0, len(medias)):
    try:
        url2 = 'https://c.y.qq.com/base/fcgi-bin/fcg_music_express_mobile3.fcg?&jsonpCallback=MusicJsonCallback&cid=205361747&songmid=' + song_mid[n] + '&filename=C400' + medias[n] + '.m4a&guid=4441071008' # 重要参数提取接口
        rest2 = self.get_request(url2)
        js2 = json.loads(rest2.text)
        vkey = js2['data']['items'][0]['vkey']
        src.append('https://isure.stream.qqmusic.qq.com/C400' + medias[n] + '.m4a?vkey=' + vkey + '&guid=4441071008&uin=0&fromtag=66') # 下载接口
    except:
        print("检测到异常,请重新下载")
        break
print("*"*30)
for m in range(0, len(src)):
    print("%-4d" % (int(m+1)) + '《' + song_names[m] + '》' + ' - ' + singers[m])
song_index = int(input("请选择序号:").strip())
if song_index < 0:
    print("退出QQ音乐爬虫程序")
    break
try:
    song_data = self.get_request(src[song_index - 1])
    data = song_data.content
    self.download(data, song_names[song_index-1])
except Exception as er:
    print("检测到异常,请重新下载 ", er)

Ejecute el programa:


Todos son responsables de apoyar

75 artículos originales publicados · Me gustó 267 · Visitas 5200

Supongo que te gusta

Origin blog.csdn.net/weixin_45961774/article/details/105601148
Recomendado
Clasificación