# -*- coding: utf-8 -*-
# @Time : 2020/2/3 11:04
# @Author : LiuZe
# @File : musicwords.py
# @Software : PyCharm
from urllib import request
from urllib import parse
import json
import requests
music_name=input('请输入歌名:')
music_name=parse.urlencode({'music_name':music_name})
url='https://c.y.qq.com/soso/fcgi-bin/client_search_cp?ct=24&qqmusic_ver=1298&new_json=1&remoteplace=txt.yqq.song&w='+music_name[music_name.find('=')+1:]
XHR_content=request.urlopen(url=url)
XHR=(XHR_content.read().decode('utf-8'))[9:-1]
XHR=json.loads(XHR) # 此时XHR的类型为字典
XHR_list=XHR['data']['song']['list']
name_html=dict()
id_list=[]
names_list=[]
for song in range(len(XHR_list)):
HTML=XHR_list[song]['title']
music_names=XHR_list[song]['mid']
names_list.append(music_names)
id=XHR_list[song]['id']
id_list.append(id)
name_html['{}:-'.format(song+1)+HTML]='https://y.qq.com/n/yqq/song/{}.html'.format(music_names)
print('符合要求的歌曲有:')
for i in name_html:
print('{}'.format(i))
XH=input('请输入序号:');url_1=''
for i in name_html:
if XH in i:
url_1=name_html[i]
if url_1!='':
url='https://c.y.qq.com/lyric/fcgi-bin/fcg_query_lyric_yqq.fcg?nobase64=1&musicid={}&-=jsonp1&loginUin=0&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8¬ice=0&platform=yqq.json&needNewCode=0'.format(id_list[int(XH)-1])
header = {"referer":url_1,
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36"}
content=requests.get(url=url,headers=header)
try:
text=json.loads(content.text)['lyric']
YU_list=[' ',' ','-','(',')',''','ti:','ar:','al:','by:',''']
JN_list=['\n',' ','-','(',')','’','','','','','’']
# 通过发现爬取的内容中的规律
# =='\n'  :==' '
# -=='-' (=='('
# )==')'
for i,j in zip(YU_list,JN_list):
text=text.replace(i,j)
text=text[text.find(']')+1:]
text=text.split('\n')
print('*'*70)
for str_2 in text:
str_2=str_2[str_2.find(']')+1:]
if str_2!='':
print('*'+str_2.center(60))
print('*' * 70)
except Exception as e:
print('对不起,该歌没有歌词,不信你上QQ音乐上看看试试!')
else:
print('你的输入有问题!')
运行结果:
中文歌词
英文歌
注意:这个项目现在也许一些歌词的输出效果不会很美观。
如果大家觉得这个还有什么改进之处,欢迎大家评论。
如果觉得这个还行,记得点赞和关注。