运用爬虫做了一个项目:输入一首歌的名字,输出该歌曲的歌词

# -*- 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&notice=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=['
',' ','-','(',')','&apos&#59;','ti:','ar:','al:','by:',''']
        JN_list=['\n',' ','-','(',')','’','','','','','’']
        # 通过发现爬取的内容中的规律
        #  
=='\n'   &#32:==' '
        #  -=='-'    (=='('
        #  )==')'
        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('你的输入有问题!')

运行结果:
中文歌词
在这里插入图片描述
英文歌
在这里插入图片描述
注意:这个项目现在也许一些歌词的输出效果不会很美观。

如果大家觉得这个还有什么改进之处,欢迎大家评论。
如果觉得这个还行,记得点赞和关注。

发布了51 篇原创文章 · 获赞 299 · 访问量 9204

猜你喜欢

转载自blog.csdn.net/qq_45404396/article/details/104155368