(数据分析)网易云热评技巧
(数据分析)网易云热评技巧
本文通过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个字之间,不要太长让人没有耐心读下去。
(数据分析)网易云热评技巧相关推荐
- Java爬虫——网易云热评爬取
爬取目标网址 : http://music.163.com/#/song?id=409649818 需要爬取信息 : 网易云top13热评 使用之前的 HttpURLConnection 获取 ...
- js版微信测试号推送消息、生日、纪念日、网易云热评、舔狗日记【JavaScript版】保姆级教程 青龙面板做微信测试号推送生日、纪念日
文章目录 微信测试号推送消息 一.申请微信测试号 二.下载nodeJs 1.下载安装包 2.检查是否安装成功 三.设置测试号发送信息的模板 四.编写发送消息代码(必须装好nodeJs) 1.编写代码 ...
- 使用urllib 爬取万条伤感网易云热评
使用urllib 爬取万条伤感网易云热评 import urllib.request import re import ssl import json #抓取一页 def 网易云热评(url):#创建 ...
- java爬取网易云热评并制作词云。
IT小白终于脱离hello world,实现用java爬取网易云热评并制作词云,激动激动激动. 一.自我介绍 二.上代码 1.封装各个model类 2.实现各项功能的service类 3.设计一个制作 ...
- python爬取网易云热评
在爬取了妹子图之后,感觉总想再爬点什么东西增加编程兴趣,因为平时喜欢听歌嘛,然后就想到了爬取网易云热评,一首歌无数个故事23333- 首先打开网易云音乐网页版,找到自己想要爬取的那首歌(我这里搜的是隔 ...
- Scriptable脚本——网易云热评2.0
首发自公众号--曰(读yue)坛 今天我为大家带来新的作品,iOS14桌面组件神器(Scriptable)原创脚本,精美作品分享!喜欢的话就点关注吧!更多脚本正在路上- /************** ...
- 关于给hexo博客增加每日一言(诗句,影视名句,网易云热评等)
前言:看到很多个人博客都带有每日一言功能,所以决定也弄一个,挺好看的.基于matery主题设置的,其他主题原理也一样可参考. 每日一言API 一言网(hitokoto.cn)创立于 2016 年,隶属 ...
- Jsrpc学习——网易云热评加密函数逆向
点击上方"Python共享之家",进行关注 回复"资源"即可获赠Python学习资料 今 日 鸡 汤 烟笼寒水月笼沙,夜泊秦淮近酒家. 大家好,我是皮皮. 前几 ...
- 随机获取歌曲信息播放php,网易云热评随机获取PHP代码
随机获取网易云音乐的热评,可以修改源码,改成你自己需要的格式,参数format可决定返回的json格式或text格式分享在线接口文本格式:http://tool.ayangw.com/wyy/hot. ...
最新文章
- Exchange 2003允许部分用户发送邮件到部分外网服务器
- python画散点图分布-python画时间序列散点图
- 交互输入与for语句
- pb 窗口数据修改sql_Snowflake将成为在云中变得更好的数据仓库
- C#环境下使用Windows消息传递字符串数据的研究
- [翻译]API Guides - Bound Services
- ADempiere3.6.0LTS - 创建国家地区城市(基于Ubuntu Desktop 12.04 LTS)
- [jQuery基础] jQuery对象 -- 选择器
- STM32 KEIL 下的 printf 函数
- Filter 敏感词汇过滤案例
- 离线OCR、文字识别、ios证件扫描、ios系统OCR(ios、android)
- vue弹出alert_vue.extend实现alert模态框弹窗步骤详解
- windows系统排查-文件分析
- MYSQL 按照身份证筛选年龄和性别
- Shiro学习(22)集成验证码
- 数据库实验4 SQL语言-SELECT查询操作
- 推荐系统三十六式(刑无刀)学习笔记(四)
- 【Spark】--SparkCore6
- 欢迎进入GeekYang博客导航一站式搜索(所有博客的汇总帖)
- Java高并发和多线程的面试笔试题——稳拿offer
热门文章
- 数据挖掘期末复习提纲(2021.7.3)
- 一文看懂推荐系统:召回03:基于用户的协同过滤(UserCF),要计算用户之间的相似度
- WebLogic 11g默认用户密码
- 一个线程池引发的悲剧
- 关于ConcurrentHashMap的key和value不能为null的深层次原因
- R语言ggplot2可视化:使用ggpubr包的ggscatter函数可视化散点图、使用xscale函数指定X轴坐标轴度量调整方式、设置x轴坐标为sqrt显示平方根坐标值
- 【计算机系统】缓冲区溢出攻击实验
- 如何发布web网站(一)
- 触发器及触发器的作用
- Cocos2dx游戏教程(一):“见缝插针”,游戏项目的搭建