zoukankan      html  css  js  c++  java
  • 手把手教你使用Python抓取QQ音乐数据(第二弹)

    【一、项目目标】

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

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

    【二、需要的库】

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

     

    【三、项目实现】

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

     

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

     
     

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

     

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

     

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

     

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

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

     

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

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

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

    import requests,html,jsonurl_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中foriincomments:comment = i['rootcommentcontent'] +' —————————————————————————————————— '    f2.writelines(comment)# print(comment)f2.close()input('下载成功,按回车键退出!')

        10. 封装函数

        11.结果展示

     
     

    【四、总结】

        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音乐”四个字进行获取。

  • 相关阅读:
    面条代码 vs. 馄沌代码
    GraphQL 到底怎么用?看看这个例子就知道了
    程序员难逃二八法则,如何晋升为头部 20% 玩家?
    正则匹配负正数和负小数
    js、Jquery处理自动计算的输入框事件
    mobile easyui兼容实体数据(tree插件为例)
    framework7中一行的字如果过多就省略号显示的CSS写法
    PHP获取系统时间不对的解决办法(转载)
    BZOJ 3156: 防御准备
    P4098 [HEOI2013]ALO
  • 原文地址:https://www.cnblogs.com/dcpeng/p/12773126.html
Copyright © 2011-2022 走看看