wpf 网易云歌词_爬取网易云听歌排行榜歌单制作云词

8a222bd4b1a4ed4b580661ba51fe9b50.png

最近又到了一年一度的年底总结了,网易云音乐如此退出了年度歌单,又一次被刷朋友圈了。作为程序员,就好奇的想验证下结论准不准,随便回顾下爬虫的操作。

首先,打开网页版网易云音乐,登录成功后,进入自己或好友的听歌排行榜,如图:

1e1e1c042194e23eea7734d7cdd53c07.png

直接使用浏览器的开发工具,刷新页面查看接口及其返回结果,找到刷新该列表的接口,如图:

c4aff649e3baaa8518c1701f2db68951.png

c4aff649e3baaa8518c1701f2db68951.png

找到url后,再找到对应的cookie等值,复制保存。如图:

caed9057df58afa14da21f6716273d20.png

be4cc0be8d96308d3500ad16752f1972.png

至此,我们已经找到网页所有想要的信息了,下面我们就可以直接用代码实现了。

思路:

a.先爬取歌曲列表,获取对应歌曲的信息,存放到数据库,以便后面使用

b.通过歌曲的id,获取对应的歌词;

c.读取歌词分析获取关键词

d.选择自定义的背景图生成自己的词图

1.需要用到的模块

256cfdb1e3f977cfe5561155ccefe2a9.png

2.自定义三个函数

a) get_info():获取历史列表中的所有歌曲并将其写入数据库中,同时返回所有歌曲的id,以便后面获取歌词

代码块如下:

def get_info(url,headers):
    '''获取历史列表中的所有歌曲并将其写入数据库中,同时返回所有歌曲的id,
    以便后面获取歌词'''
    """
    @url:历史列表中的URl
    @headers:请求头,带cookie
    """
    data = {
        'encSecKey': 'post参数->浏览器Network获取或抓包获取',
        'params': 'post参数->浏览器Network获取或抓包获取'
    }
    html = requests.post(url,data=data,headers=headers)
    html.encoding='utf-8'
    lmusic = html.json()['allData']
    listid = []
    try:
        connet = pymssql.connect(host='127.0.0.1',user='sa',password='123456',database='WebSpider')#数据库参数
    except pymssql.OperationalError as p:#异常处理
        print(p)
    else:
        cursor = connet.cursor()
        for music in lmusic:
            playCount=music['playCount']
            mname=music['song']['name']
            mid=music['song']['id']
            listid.append(mid)
            musicer = music['song']['ar'][0]['name']
            print("正在向数据库插入%s的信息"%mname)
            if ''' in mname:
                #对带有单引号的内容进行转义,不然插入数据库会报错
                mname=mname.replace(''','''')
                sql = "insert into Music_wyy_2019 values ('%d','%s','%s','%d')" % (mid, mname, musicer, playCount)
            else:
                sql = "insert into Music_wyy_2019 values ('%d','%s','%s','%d')" % (mid, mname, musicer, playCount)
            cursor.execute(sql)
        connet.commit()
    finally:
        connet.close()
        print("数据库已关闭")
    return listid

a) get_lyric():获取所有歌曲的歌词

吐槽一句,之前直接用'http://music.163.com/api/song/media?id={id}'.format(id=id),就可以通过这个api直接获取对应id歌曲的歌词,现在被封了,只能用UI来分别爬取了,效率极低(考虑用多线程处理)

b) get_wordcloud():生成对应的词云图

2.定义好歌词存放的位置、选择词图的背景图及最后生成词图的位置,依次调用上面三个函数即可。效果图如下:

73273cd06e31324a3c9c0f6c44436a6e.png

4.关注公众号,回复’网易云’三个字即可获取完整代码(还可获取专属个人最爱音乐词图定制全过程代码)

8dc73bb7b51dbed10bf456b362fe9c39.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值