有个段子讲“十年文案老司机,不如网易评论区,网易文豪遍地走,评论全部单身狗”,网易云音乐的评论区也一直都是各类文案大神的聚集地。

那么我们普通用户到底如何成为网易云音乐评论里的热评段子手?

so. 自己接下来将会耐心分享如何爬取了华语歌曲10w+的热评,并且进行了可视化分析的方法。运行环境:python3.6

主要用到的包:PyQuery、requests、jsonpath、pandas、numpy、matplotlib、jieba、wordcloud、seaborn、logging

>>>快速通道,不需要流程分析的直接戳下面的链接,看全部的代码:网易云音乐热评详细源码-Python_python,数据分析_weixin_47616706的博客-CSDN博客​blog.csdn.net爬取数据爬取华语歌单列表中所有的歌单url

从每篇歌单地址中爬取每首歌的url

从每首歌的首页爬取热评

先来看一下要爬取的页面

点几页观察url的变化发现:url格式:xxx&limit=35&offset=35n

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,35,35): # 跑一页试试,如果跑全部,改为 range(0,1295,35)

url1 = url.format(page = page)

list = []

for i in scrape_index(url1): # generator 遍历之后的i的类型仍然是qyquery类型

i_url = i.attr('href') # attr 方法来获取属性

'''获取歌单和评论均用了网易云音乐get请求的API,快速高效!网易云歌单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?")}' #获取的url还需要替换一下符合API要求的格式

list.append(detail_url)

list_01.extend(list) # extend 对列表合并

time.sleep(5+random.random()) # 文明爬虫

return list_01

这样我们就可以获得38页每页35篇歌单,共1300+篇歌单。

而且需要说明明的是,获取歌单内容采用的是网易云音乐的api,即只需获得歌单ID,通过API即可获得详细得歌单内容。

注意:类似的是后面热评的获取,我们也只是需要获取歌曲ID,然后再用网易云的热评API即可获得详细的歌曲热评。用API获得的json格式的页面

看到杂乱的json文本不要急,可以复制到json在线解析解析一下:JSON在线解析,JSON格式化,JSON解析,JSON 校验(SO JSON)​www.sojson.com

我们只需要获得歌曲的name和id的值即可,注意不是歌手的name 和 id。

'''

热评获取API:http://music.163.com/api/v1/resource/comments/R_SO_4_{歌曲ID}?limit=20&offset=0

所以获取歌曲的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'] = name

data.append(dic)

return data

我们就爬取了94022行,7列的数据数据分析

数据读取:

'''

读取刚刚爬好的热评文件

df1 = pd.read_csv('hotComments_06.csv',index_col = 0)

ERROR: Buffer overflow caught -缓冲区溢出

发现也是因为csv文件中单个item内有\r,即回车符

解决方法:lineterminator=”\n”:让\n作为换行符即可

'''

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

df1.info()

异常值的处理:

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

df3['content'].iloc[432:435]

df3['content1'] = df3['content'].apply(lambda x:x.replace('\r',''))替换前替换后

数据整理分析:

# 对点赞数排序,取前10的点赞数

df5 = df4.sort_values(by = 'likecount',ascending = False)

df5.head(10).to_csv('strat_TOP10.csv',index = False, encoding = 'utf-8-sig')点赞数前10的评论

# 提取重复最多的句子

df6 = df4.groupby('content').size().sort_values(ascending = False).reset_index(name = 'count')

热评的频次较多的词语都有哪些?

'''

jieba库中基于 TextRank 算法的关键词抽取

详情见官方文档:https://github.com/fxsjy/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: # 对分词好后的words进行提取,并且关联一个1,方便进行计数

segments.append({'word':w,'counts':1})

df_w = pd.DataFrame(segments)在热评的称谓中,兄弟姐妹这些词更能得到大家的认可,亲情与友情可以触动全年龄段的人,孩子作为青年阶段后才产生的羁绊,相对而言在热评中提及略少。被提及最多的人生阶段是大学,在这个从校园到社会的过渡期,每个人都有不一样的精彩。而在人生的一些重要节点上,高考的提及率遥遥领先。那段心无旁骛,拼尽全力,且拥有无限希望与可能性的日子里,承载着许多人的阴差阳错与柳暗花明。

词云

'''

2222.png是一张作为蒙版的图片,需要转换成numy数组才可以用

利用PIL模块读取我们的png文件并转换为numpy数组,作为WordCloud的mask参数传入

'''

mask_cir = np.array(Image.open('2222.png'))

wordc =WordCloud(

background_color='white',

mask = mask_cir,

font_path = 'SimHei.ttf', # 中文显示的方法,baidu载一个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()我们将所有热评绘制成词云,发现“喜欢”与“大哭”这两个感情色彩截然不同的词汇被最多提及。也许大部分人都经历过的两件事,就是年少懵懂的倾慕与深夜崩溃的瞬间。

热评最多的ID都有那些特征

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

看一下用户id 424311909的点赞数分布

'''

hist: 直方图

bins: 条形数

density: bool 密度显示

'''

plt.hist(df12, bins = 200, density = True )

plt.xlim((0,6000))

plt.title('424311909用户的点赞分布')

plt.savefig('start_424311909.png',dpi = 100)

plt.show()424311909用户的点赞分布基本在500左右,几百赞却能跻身热评,这也侧面说明了这些歌曲是比较小众的,看来是经常在新歌区广撒网。

看一下用户id 424311909的评论的字数分布

'''

看评论的长度分布

len(df11['content']) --- out: 133

显示的是这个series的长度

'''

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()424311909用户的评论字数集中在11-17个字之间,不会过于短也不会过于长。

因此,要在网易评论区称霸,首先你要多听歌,多发动态,多收藏和创建歌单,这样点进你主页的人也许就会发出“哇是大佬哦”的感叹。

其次在留言时要注意字数,保险的做法是不要太长让人读不下去,也不要太短以免不够经典。

为自己起一个容易记的,带一点文艺气质的名字,最好给账号加上V。

然后在新歌区广撒网,趁评论不多时,用忧伤的语气配合细腻的文字,讲一些似有故事的情话,最好配合着对青春的怀念与理想化的追求。

最后再一次附上源码:

python网易云听歌时长_用Python爬取10w条网易云音乐热评并进行分析的方法总结相关推荐

  1. python网易云听歌时长_网易云一起听歌时间怎么不变_一起听歌为什么一直一分钟_3DM手游...

    在网易云音乐中一起听歌的时候,是会显示用户听歌时间等信息的,但是有的小伙伴发现,自己听了很长时间的歌,听歌时长却一直不变,一直是1分钟,这是怎么回事呢?网易云一起听歌时间不变怎么办?下面我们就一起来看 ...

  2. python网易云听歌时长_Python爬虫实战:爬取小姐姐最近的听歌曲目

    前言 作为网易云村的深度用户,网易云音乐应该是我除了微信外打开时间最长的 App 了.并不是应为网易云上面的歌曲多,而是因为那些走心的评论.边听歌边刷评论,感觉就像是走进了他人的人生之中,从另外一种意 ...

  3. java小说目录提取_完整Java爬取起点小说网小说目录以及对应链接

    完整Java爬取起点小说网小说目录以及对应链接 完整Java爬取起点小说网小说目录以及对应链接 (第一次使用markdown写,其中的排版很不好,望大家理解) ?? 因为最近有一个比赛的事情,故前期看 ...

  4. 【Python从零到壹】使用XPath解析数据爬取起点小说网数据

    我们已经可以从网上爬取数据了,现在我们来看看如何对数据解析 文章目录 1. xpath 的介绍 优点: 安装lxml库 XML的树形结构: 选取节点的表达式举例: 2. 爬取起点小说网 在浏览器中获取 ...

  5. pythontime模块计算时长_用python的time模块查看你出生多长时间了

    time模块的应用查看出生了多长时间 查看银行卡解封时间 1.查看出生了多长时间 这里我们使用time模块计算我们出生了多长时间 import time # 导入时间模块 b = input('你的出 ...

  6. python里的英文歌叫什么_用Python分析韩国女团最喜欢的英文单词

    原标题:用Python分析韩国女团最喜欢的英文单词 本文经Python中文社区(公众号ID:python-china) 授权转载,转载请联系出处 ♚ 盛光晓,粗通python,精通arcpy,某公司首 ...

  7. python简单实践作业答案_python入门实践四:爬取牛客网面试专项练习题及答案

    说明:个人练手python用. 操作系统:window10 x64 IDE:Pycharm 2017.2.2 Python版本:3.6.2 目标 牛客网是一个IT笔试面试的平台,提供了很多题库,今天我 ...

  8. python黑客库长安十二时辰 更新_程序员爬取 3 万条评论,《长安十二时辰》槽点大揭秘!...

    该剧总体评价如何? 优酷给<长安十二时辰>打出了8.8的高分(首播时为9.0分).该剧在豆瓣.IMDB.时光网等平台分别收获了8.6.8.5.8.4分,这足以说明该剧总体评价还是不错的. ...

  9. 爬取猫眼电影网前100的电影排名

    爬取猫眼电影网前100的电影排名 猫眼电影网:http://maoyan.com/board/4 确定要爬取的数据: 1:排名 2:电影名称 3:主演 4:上映舌尖 5:评分 构造下一页url 首页: ...

最新文章

  1. 科学世界的人文关怀:开源科学与人工智能
  2. There is no getter for property named ‘col‘ in ‘class String‘,不是说一个参数不需要@Param注解吗?#{}和${}的区别
  3. 英语语法---谓语详解
  4. php无法下单功能,PHP如何解决并发下单问题?(不一定是下单,举个例)
  5. Python3中的hasattr()
  6. 微软借Bletchley项目将云计算信息加入区块链
  7. 数控机床手动编程能否用计算机验证,数控编程的方法有几种_数控编程的步骤...
  8. HDU 5510---Bazinga(指针模拟)
  9. Java集合中的retainAll()方法和removeAll()方法
  10. 三维空间曲面的切平面以及在某一点上的切线,法线
  11. HP惠普笔记本Microsoft ACPI Compliant System未知设备的解决办法
  12. Self-Supervised Learning 自监督学习中Pretext task的理解
  13. 双月报8.24-10.23
  14. 事后诸葛亮-团队总结
  15. ES的mapping配置详解
  16. 14个适合后台管理系统开发的前端框架,建议收藏!
  17. 陈学智升任VMware全球副总裁、大中华区总裁,面临四个挑战
  18. Android内存优化之图片优化
  19. git(9)Git 内部原理,java入门视频百度网盘
  20. 计算机组成原理中LD,计算机组成原理课件第三章计算机中的数据表示.ppt

热门文章

  1. golang 数组组合成最小的整数_整数数组拼成一个最小或最大的数
  2. 微生物组β-多样性——PCoA分析及可视化
  3. 电脑c盘满了变成红色了怎么清理?看看这7个方法
  4. HIDS-ebpf-0
  5. bypass最新版d盾mysql_D盾一句话动态代码执行拦截bypass
  6. 101128 ~ 101204
  7. 运城学院计算机应用技术,运城学院学子在中国大学生计算机设计大赛中取得历史最好成绩...
  8. 【极客时间】左耳听风
  9. 转贴--爱的最高境界
  10. OpenGL-坐标系统,进入3D世界(深度测试)