zoukankan      html  css  js  c++  java
  • 爬虫小案例:查询歌手歌单

    需求:输入歌手名,查询出歌手的歌单

    注意:数据来源 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()

  • 相关阅读:
    园 首页 新随笔 联系 管理 订阅 订阅 RTSP协议转换RTMP直播协议
    sequence diagram
    Model Binding
    asp.net mvc
    系统日志和异常的处理①
    随机森林之oob error 估计
    Extjs相关知识点梳理
    Extjs报错处理
    webbrowser在html中写入内容并添加js
    tcpdump一个命令的剖析
  • 原文地址:https://www.cnblogs.com/KeenLeung/p/12162915.html
Copyright © 2011-2022 走看看