网易云音乐用户信息爬取以及可视化

选的课程方向是爬取网易云音乐某首歌曲的用户评论内容和评论时间,观察每天哪个时间段的评论信息最多,每周哪天的评论信息最多。然后分析该歌曲的用户性别分布和年龄分布。所以首先需要通过爬虫来爬取评论信息和用户信息,然后通过可视化方法来统计该信息。

由于网易云音乐有官方的API接口,所以获取用户信息这一步就变得简单。另外可视化部分,通过pyecharts工具进行可视化操作。
网易云官方API
网易云官方API接口
pyecharts文档
pycharts中文文档

首先爬取用户信息:

    url = 'https://music.163.com/api/v1/resource/comments/R_SO_4_' + str(songid) + '?csrf_token='
    data = {'params': params, 'encSecKey': encSecKey}

https://music.163.com/api/v1/resource/comments/R_SO_4_
上面这部分是官方接口的基础URL,由于网易云评论是Ajax类型,所以我们去评论的界面右击检查,单击R_SO_4_’ + str(songid) + '?csrf_token=这个包,发现表单数据为
在这里插入图片描述
由此可知,当我们对网易云评论界面发起请求时,需要加入这部分的表单数据。对于params和encSecKey的生成来源以及构造方法,参考:
添加链接描述

通过构造URL之后,便可对其发起请求,得到json格式数据。
第一页的json格式如下:
在这里插入图片描述
第一页,所需要的键主要包括comments和hotcomments分别对应评论以及热门评论,除此之外我们需要获取total这个键来得知所要爬取的页数。
comments键中包括每个用户的评论信息,我们这里需要的主要是用户名成,用户内容和用户ID,分别对应这nickname,content和userId。
在这里插入图片描述
通过爬取,我们将得到的信息保存到xls或者csv文件中,亦或者保存到数据库当中,这里就简单使用了xlwt库来保存数据。
在这里插入图片描述
这里的评论时间还没有处理,暂时是通过时间戳来保存的。得到评论信息之后,通过pyecharts来可视化数据。

input={"id":id,"time":pro_times}//id为编号,pro_times为处理后的时间戳
df=pd.DataFrame(input)//转化为dataframe格式
df["time"]=pd.to_datetime(df['time'],unit="s")//将时间戳转化为具体时间
df["day"]=df['time'].dt.date//将时间规整为以天为单位
curve_day=df["id"].groupby(df["day"]).count()//统计分布

line=Line("评论时间(按天)分布")
line.use_theme('dark')
line.add(
    "",
    curve_day.index.values,//时间
    curve_day.values,//该时间对应的评论数
    is_fill=True,
)
line.render(r"以天为单位的评论时间分布曲线.html")

由此可以得到评论数随日期的变化:(以小时为单位同理)
在这里插入图片描述
在这里插入图片描述
爬取完用户信息之后我们需要通过之前爬取的用户ID来继续爬取用户信息,包括评论用户的性别,年龄等。

url="https://music.163.com/api/v1/user/detail/"+str(user_id)

以上为爬取用户信息的基础URL
通过爬虫得到的json数据如下:
在这里插入图片描述
由于json数据比较多,这里只截取了了所需的一部分,其中包括gender,birthday和city。city这部分是通过城市编码的形式来表示的,所以需要搞清楚对应的城市。

url='http://www.mca.gov.cn/article/sj/xzqh/2018/201804-12/20180810101641.html'

通过对上面的url进行爬取,得到了对应的城市编码
在这里插入图片描述
然后匹配了对应的城市,最终将用户的统计信息保存到xls或者csv文件。
在这里插入图片描述
得到用户信息之后,继续通过pyecharts来进行可视化工作。
通过使用pyecharts自带的geo,生成了热力图
在这里插入图片描述
配色因为是冬天就搞了个寒冰色,配色啥的真的头痛。附带RGB。
RGB编码
最后是年龄分布和性别比例:
在这里插入图片描述
在这里插入图片描述

  • 7
    点赞
  • 109
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值