美文网首页Python自动化运维Ubuntu的那些事儿python3
手把手教你使用Python抓取QQ音乐数据(第二弹)

手把手教你使用Python抓取QQ音乐数据(第二弹)

作者: Python进阶学习交流 | 来源:发表于2020-04-25 22:07 被阅读0次

    【一、项目目标】

    通过Python爬取QQ音乐数据(一)我们实现了获取 QQ 音乐指定歌手单曲排行指定页数的歌曲的歌名、专辑名、播放链接。

    此次我们在之前的基础上获取QQ音乐指定歌曲的歌词及前15个精彩评论。

    【二、需要的库】

    主要涉及的库有:requests、json、html

    image

    【三、项目实现】

    1、以歌曲“泡沫”为例,查看该界面的XHR

    image

    2、通过对XHR的Size进行排序,逐个查看(参考英文含义),我们看到第一个红框内是歌曲评论,第二个框内是歌词!

    image image

    3、分别查看这两条数据Headers里面Parms参数。

    image

    4、发现这几个参数可能会代表不同的歌曲,那到底是哪个呢,我们在代开另一首歌对比一下。

    image

    5、发现只有这个topid不同,其他都一样,这就代表topid代表不同歌曲的id,同理我们看一下歌词。

    image

    6、确定下来:musicid= topid = 歌曲的id,接下来我们的任务是找到这个id。

    7、返回以下界面,也就是我们上一个项目的主战场。

    image

    参考上一个项目,很容易找到“id”的值就是我们要寻找的id。

    所以思路确定下来:先通过input()输入歌名生成url_1找到该歌曲的“id”参数,再生成url_2获取歌词和评论。

    8、代码实现:获取歌曲id,如下所示:

    import requests,html,json
    url_1 = 'https://c.y.qq.com/soso/fcgi-bin/client_search_cp'
    headers = {
    'user-agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36',
        # 标记了请求从什么设备,什么浏览器上发出
        }
    i = input('请输入需要查询歌词的歌曲名称:')
    params = {'ct': '24', 'qqmusic_ver': '1298', 'new_json': '1', 'remoteplace': 'txt.yqq.song', 'searchid': '71600317520820180', 't': '0', 'aggr': '1', 'cr': '1', 'catZhida': '1', 'lossless': '0', 'flag_qc': '0', 'p': '1', 'n': '10', 'w': i, 'g_tk': '5381', 'loginUin': '0', 'hostUin': '0', 'format': 'json', 'inCharset': 'utf8', 'outCharset': 'utf-8', 'notice': '0', 'platform': 'yqq.json', 'needNewCode': '0'}
        
    res_music = requests.get(url_1,headers=headers,params=params)
    # 发起请求
    json_music = res_music.json()
    id = json_music['data']['song']['list'][0]['id']
    print(id)
    

    9、代码实现:获取歌词
    实现方法如下:

    url_2 = 'https://c.y.qq.com/lyric/fcgi-bin/fcg_query_lyric_yqq.fcg'
    headers = {
    'user-agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36',
        # 标记了请求从什么设备,什么浏览器上发出
        }
    params = {
        'nobase64':'1',
        'musicid':id,   #用上面获取到的id
        '-':'jsonp1',
        'g_tk':'5381',
        'loginUin':'0',
        'hostUin':'0',
        'format':'json',
        'inCharset':'utf8',
        'outCharset':'utf-8',
        'notice':'0',
        'platform':'yqq.json',
        'needNewCode':'0',
        }
    
    res_music = requests.get(url_2,headers=headers,params=params)
    # 发起请求
    js = res_music.json()
    lyric = js['lyric']
    lyric_html = html.unescape(lyric)   #用了转义字符html.unescape方法
    # print(lyric_html)
    f1 = open(i+'歌词.txt','a',encoding='utf-8')
    f1.writelines(lyric_html)
    f1.close()                #存储到txt中
    input('下载成功,按回车键退出!')
    

    10、代码实现:获取评论。

    url_3 = 'https://c.y.qq.com/base/fcgi-bin/fcg_global_comment_h5.fcg'
    headers = {
    'user-agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36',
        //  标记了请求从什么设备,什么浏览器上发出
        }
    params = {'g_tk_new_20200303': '5381', 'g_tk': '5381', 'loginUin': '0', 'hostUin': '0', 'format': 'json', 'inCharset': 'utf8', 'outCharset': 'GB2312', 'notice': '0', 'platform': 'yqq.json', 'needNewCode': '0', 'cid': '205360772', 'reqtype': '2', 'biztype': '1', 'topid': id, 'cmd': '8', 'needmusiccrit': '0', 'pagenum': '0', 'pagesize': '25', 'lasthotcommentid': '', 'domain': 'qq.com', 'ct': '24', 'cv': '10101010'}
    res_music = requests.get(url_3,headers=headers,params=params)
    // 发起请求
    js = res_music.json()
    comments = js['hot_comment']['commentlist']
    f2 = open(i+'评论.txt','a',encoding='utf-8')    // 存储到txt中
    for i in comments:
        comment = i['rootcommentcontent'] + '\n——————————————————————————————————\n'
        f2.writelines(comment)
    // print(comment)
    f2.close()
    input('下载成功,按回车键退出!')
    

    11、封装函数

    12、结果展示

    image image image

    【四、总结】

    1、项目二比项目一稍复杂一点,多了一步获取歌曲id的步骤;

    2、通过XHR爬取数据一般要使用json,格式为:

    res =requests.get(url)
    json =res.json()
    list = json[‘’][‘’]…
    

    3、学习了转义字符html.unescape方法;

    4、保存到txt还可以用 with open() as的方法;

    5、Python爬取QQ音乐数据(第三弹)将为大家带来如何爬取更多评论,并生成词云图(wordcloud)。

    6、需要本文源码的话,请在公众号后台回复“QQ音乐”四个字进行获取。

    ****看完本文有收获?请转发分享给更多的人****

    IT共享之家

    入群请在微信后台回复【入群】

    image

    相关文章

      网友评论

        本文标题:手把手教你使用Python抓取QQ音乐数据(第二弹)

        本文链接:https://www.haomeiwen.com/subject/svplwhtx.html