爬虫小案例:查询歌手歌单
作者:互联网
需求:输入歌手名,查询出歌手的歌单
注意:数据来源 QQ 音乐,为了减少 QQ 音乐服务器压力,避免拒绝访问,请求的数据量不要太大。
代码仅限学习使用
# 引用requests库 import requests # 控制循环 flag = True # 获取歌单 def getmusiclist(singer=''): # 调用get方法,下载这个字典 url = 'https://c.y.qq.com/soso/fcgi-bin/client_search_cp' # 定制请求头,伪装成浏览器 headers = { "origin": "https://y.qq.com", "referer": "https://y.qq.com/portal/search.html", "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36 OPR/65.0.3467.78 (Edition Baidu)", } # 请求参数 params = { 'ct': '24', 'qqmusic_ver': '1298', 'new_json': '1', 'remoteplace': 'txt.yqq.song', 'searchid': '70717568573156220', 't': '0', 'aggr': '1', 'cr': '1', 'catZhida': '1', 'lossless': '0', 'flag_qc': '0', 'p': '1', # 当前歌曲页面 'n': '20', # 每页歌曲的歌曲数目 'w': singer, # 歌手名称 'g_tk': '714057807', 'loginUin': '0', 'hostUin': '0', 'format': 'json', 'inCharset': 'utf8', 'outCharset': 'utf-8', 'notice': '0', 'platform': 'yqq.json', 'needNewCode': '0' } res = requests.get(url, headers=headers, params=params) if res.status_code == 200: # 返回 json 数据 json_music = res.json() if len(json_music['data']['song']['list']) <= 0: print('很抱歉,暂时没有找到与“{}”相关的结果'.format(singer)) else: for music in json_music['data']['song']['list']: # 歌曲名称 title = music['title'] # 专辑 album_name = music['album']['name'] # 播放时长 interval = int(music['interval']) interval = "{}分{}秒".format(interval // 60, interval % 60) # 播放链接 playurl = 'https://y.qq.com/n/yqq/song/{0}.html'.format(music['mid']) print('歌曲名称:{},专辑:{},播放时长:{},播放链接:{}'.format(title, album_name, interval, playurl)) else: print('请求失败!') def again(): global flag n = input('是否要继续查询(输入 n/N 终止程序):') if n in ['n', 'N']: print('程序已停止,感谢使用!') flag = False def main(): while flag: singer = input('你想找哪位歌手的歌单?') getmusiclist(singer) again() main()
标签:qq,res,爬虫,歌手,headers,json,歌单,requests 来源: https://www.cnblogs.com/KeenLeung/p/12162915.html