首页 > 其他 > 详细

爬虫小案例:查询歌手歌单

时间:2020-01-07 20:15:06      阅读:98      评论:0      收藏:0      [点我收藏+]

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

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

 

技术分享图片

 

爬虫小案例:查询歌手歌单

原文:https://www.cnblogs.com/KeenLeung/p/12162915.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!