(数据分析)网易云热评技巧

本文通过Python爬虫获取了网易云9万条热评,通过数据可视化分析其中的规律,同时分析热评最多的用户特征,从中总结出上热评的技巧。

1.数据抓取

数据集的获取是我们进行数据分析的第一步。现在获取数据的主要途径一般为:现成数据;自己写爬虫去爬取数据;使用现有的爬虫工具爬取所需内容,保存到数据库,或以文件的形式保存到本地。博主用的是现有的数据进行数据分析。

1.1爬取过程

爬取华语歌单列表中所有的歌单url
从每篇歌单地址中爬取每首歌的url
从每首歌的首页爬取热评

先来看一下要爬取的页面

点翻页观察url的变化:

https://music.163.com/#/discover/playlist/?order=hot&cat=%E5%8D%8E%E8%AF%AD&limit=35&offset=0
https://music.163.com/#/discover/playlist/?order=hot&cat=%E5%8D%8E%E8%AF%AD&limit=35&offset=35
https://music.163.com/#/discover/playlist/?order=hot&cat=%E5%8D%8E%E8%AF%AD&limit=35&offset=70

从中可以看出翻页时url只有offset部分发生变化,每次在前一页的基础上加35。通过这个可以设计出爬取歌单的代码。

def get_list():list_01 = []url = 'https://music.163.com/discover/playlist/?order=hot&cat=%E5%8D%8E%E8%AF%AD&limit=35&offset={page}'for page in range(0,1295,35):    url1 = url.format(page = page)list = []for i in scrape_index(url1):  i_url = i.attr('href')     '''网易云歌单APIhttps://music.163.com/api/playlist/detail?id={歌单ID}热评获取APIhttp://music.163.com/api/v1/resource/comments/R_SO_4_{歌曲ID}?limit=20&offset=0'''detail_url = f'https://music.163.com/api{i_url.replace("?","/detail?")}'   list.append(detail_url) list_01.extend(list)    # extend 对列表合并          time.sleep(5+random.random())  return list_01

这样我们就可以获得38页每页35篇歌单,共1330篇歌单。
类似的是后面热评的获取,我们也只是需要获取歌曲ID,然后再用网易云的热评API即可获得详细的歌曲热评。

我们只需要获得歌曲的name和id的值即可。

def parse_detail(html):list_02 = []jobs = html['result']['tracks']for j in jobs:dic ={}dic['name'] = j['name'] # 创建 字典dic['id'] = j['id']list_02.append(dic)    return list_02   

剩下就是获取每首歌曲的热评了,与前面获取歌曲类似,也是根据api构造,很容易就找到了。

def parse_comment(html, name ):data = []jobs =  html['hotComments']for job in jobs:dic = {}dic['nickname'] = job['user']['nickname']dic['userid'] = job['user']['userId']dic['content'] = job['content'].replace('\n', '')     #  对换行符进行替换     dic['likecount'] = job['likedCount']dic['time'] = stampToTime(job['time'])   # 时间戳的转换dic['name'] = namedata.append(dic)return data

我们就爬取了87112行,7列的数据

1.2数据读取

读取刚刚爬好的csv文件

df1 = pd.read_csv('hotComments_06.csv',index_col = 0,lineterminator='\n')
df1.info()

2.数据清洗

数据得到手,我们就需要对我们爬取的数据进行清洗工作,为之后的数据分析做铺垫,如果清洗的不到位势必会对之后的数据分析造成影响。

2.1异常值处理

没有缺失值,但发现异常值,因为设置了lineterminator=’\n’,以\n为换行符,会留下\r,用replace进行替换

df3['content'].iloc[432:435]
df3['content1'] = df3['content'].apply(lambda x:x.replace('\r',''))

3.数据分析及可视化

3.1点赞数排行前10的热评

df5 = df4.sort_values(by = 'likecount',ascending = False)
df5.head(10).to_csv('strat_TOP10.csv',index = False, encoding = 'utf-8-sig')

结果如图

分析热评内容发现多为故事或对某一件事的看法,从侧面反映出了用户的喜好。

3.2热评的频次较多的词语

通过jieba库进行关键词抽取

segments = []
for index,row in df4.iterrows():  content = row[5]words = jieba.analyse.textrank(content,topK=3, withWeight=False,allowPOS=('ns', 'n', 'vn', 'v'))for w in words:                                   segments.append({'word':w,'counts':1})
df_w = pd.DataFrame(segments)

生成词云,需要自行导入background.png,以它为背景图

mask_cir = np.array(Image.open('background.png'))
wordc =WordCloud(background_color='white',mask = mask_cir,font_path = 'SimHei.ttf',    # 中文显示的方法文max_words=1000).generate(text)
plt.imshow(wordc)
plt.axis('off')    #关闭坐标轴plt.savefig('图3.jpg',dpi=600, bbox_inches='tight', quality=95)  # bbox_inches='tight',可以达到去除空白的效果
plt.show()

生成词云如图所示

我们将所有热评绘制成词云,发现“喜欢”、“希望”与“大哭”这几个感情色彩截然不同的词汇被最多提及。从中体现出用户群体感情的多样化。

3.3热评最多的ID的特征

查找热评最多的用户ID

df4.groupby('userid').count().sort_values(by = 'content',ascending = False)


发现热评最多的用户ID为424311909

看一下该用户的点赞数分布

plt.hist(df12, bins = 200, density = True )
plt.xlim((0,6000))
plt.title('424311909用户的点赞分布')
plt.savefig('start_424311909.png',dpi = 100)
plt.show()


可以看出大部分点赞数都在500以内,通过进入网易云查看其他用户热评发现点赞数远少于正常热评用户,点赞数很少却能进入热评,从中可以推测该用户评论的多为小众音乐,或者在新歌区评论。想要获得热评的人们可以借鉴他的方法。

最后看看该用户的评论长度分布

df12 = df11['content'].map(len)      # map函数进行求取每一单元格个长度plt.hist(df12,bins = 20, density = True)
plt.title('424311909用户的评论长度分布')
plt.savefig('len_424311909.png', dpi = 100)
plt.show()


可以看出想要获得热评,评论的长度不应该太长,主要集中在13到18个字之间,不要太长让人没有耐心读下去。

(数据分析)网易云热评技巧相关推荐

  1. Java爬虫——网易云热评爬取

    爬取目标网址 :   http://music.163.com/#/song?id=409649818 需要爬取信息 :   网易云top13热评 使用之前的 HttpURLConnection 获取 ...

  2. js版微信测试号推送消息、生日、纪念日、网易云热评、舔狗日记【JavaScript版】保姆级教程 青龙面板做微信测试号推送生日、纪念日

    文章目录 微信测试号推送消息 一.申请微信测试号 二.下载nodeJs 1.下载安装包 2.检查是否安装成功 三.设置测试号发送信息的模板 四.编写发送消息代码(必须装好nodeJs) 1.编写代码 ...

  3. 使用urllib 爬取万条伤感网易云热评

    使用urllib 爬取万条伤感网易云热评 import urllib.request import re import ssl import json #抓取一页 def 网易云热评(url):#创建 ...

  4. java爬取网易云热评并制作词云。

    IT小白终于脱离hello world,实现用java爬取网易云热评并制作词云,激动激动激动. 一.自我介绍 二.上代码 1.封装各个model类 2.实现各项功能的service类 3.设计一个制作 ...

  5. python爬取网易云热评

    在爬取了妹子图之后,感觉总想再爬点什么东西增加编程兴趣,因为平时喜欢听歌嘛,然后就想到了爬取网易云热评,一首歌无数个故事23333- 首先打开网易云音乐网页版,找到自己想要爬取的那首歌(我这里搜的是隔 ...

  6. Scriptable脚本——网易云热评2.0

    首发自公众号--曰(读yue)坛 今天我为大家带来新的作品,iOS14桌面组件神器(Scriptable)原创脚本,精美作品分享!喜欢的话就点关注吧!更多脚本正在路上- /************** ...

  7. 关于给hexo博客增加每日一言(诗句,影视名句,网易云热评等)

    前言:看到很多个人博客都带有每日一言功能,所以决定也弄一个,挺好看的.基于matery主题设置的,其他主题原理也一样可参考. 每日一言API 一言网(hitokoto.cn)创立于 2016 年,隶属 ...

  8. Jsrpc学习——网易云热评加密函数逆向

    点击上方"Python共享之家",进行关注 回复"资源"即可获赠Python学习资料 今 日 鸡 汤 烟笼寒水月笼沙,夜泊秦淮近酒家. 大家好,我是皮皮. 前几 ...

  9. 随机获取歌曲信息播放php,网易云热评随机获取PHP代码

    随机获取网易云音乐的热评,可以修改源码,改成你自己需要的格式,参数format可决定返回的json格式或text格式分享在线接口文本格式:http://tool.ayangw.com/wyy/hot. ...

最新文章

  1. Exchange 2003允许部分用户发送邮件到部分外网服务器
  2. python画散点图分布-python画时间序列散点图
  3. 交互输入与for语句
  4. pb 窗口数据修改sql_Snowflake将成为在云中变得更好的数据仓库
  5. C#环境下使用Windows消息传递字符串数据的研究
  6. [翻译]API Guides - Bound Services
  7. ADempiere3.6.0LTS - 创建国家地区城市(基于Ubuntu Desktop 12.04 LTS)
  8. [jQuery基础] jQuery对象 -- 选择器
  9. STM32 KEIL 下的 printf 函数
  10. Filter 敏感词汇过滤案例
  11. 离线OCR、文字识别、ios证件扫描、ios系统OCR(ios、android)
  12. vue弹出alert_vue.extend实现alert模态框弹窗步骤详解
  13. windows系统排查-文件分析
  14. MYSQL 按照身份证筛选年龄和性别
  15. Shiro学习(22)集成验证码
  16. 数据库实验4 SQL语言-SELECT查询操作
  17. 推荐系统三十六式(刑无刀)学习笔记(四)
  18. 【Spark】--SparkCore6
  19. 欢迎进入GeekYang博客导航一站式搜索(所有博客的汇总帖)
  20. Java高并发和多线程的面试笔试题——稳拿offer

热门文章

  1. 数据挖掘期末复习提纲(2021.7.3)
  2. 一文看懂推荐系统:召回03:基于用户的协同过滤(UserCF),要计算用户之间的相似度
  3. WebLogic 11g默认用户密码
  4. 一个线程池引发的悲剧
  5. 关于ConcurrentHashMap的key和value不能为null的深层次原因
  6. R语言ggplot2可视化:使用ggpubr包的ggscatter函数可视化散点图、使用xscale函数指定X轴坐标轴度量调整方式、设置x轴坐标为sqrt显示平方根坐标值
  7. 【计算机系统】缓冲区溢出攻击实验
  8. 如何发布web网站(一)
  9. 触发器及触发器的作用
  10. Cocos2dx游戏教程(一):“见缝插针”,游戏项目的搭建