python网易云听歌时长_用Python爬取10w条网易云音乐热评并进行分析的方法总结
有个段子讲“十年文案老司机,不如网易评论区,网易文豪遍地走,评论全部单身狗”,网易云音乐的评论区也一直都是各类文案大神的聚集地。
那么我们普通用户到底如何成为网易云音乐评论里的热评段子手?
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条网易云音乐热评并进行分析的方法总结相关推荐
- python网易云听歌时长_网易云一起听歌时间怎么不变_一起听歌为什么一直一分钟_3DM手游...
在网易云音乐中一起听歌的时候,是会显示用户听歌时间等信息的,但是有的小伙伴发现,自己听了很长时间的歌,听歌时长却一直不变,一直是1分钟,这是怎么回事呢?网易云一起听歌时间不变怎么办?下面我们就一起来看 ...
- python网易云听歌时长_Python爬虫实战:爬取小姐姐最近的听歌曲目
前言 作为网易云村的深度用户,网易云音乐应该是我除了微信外打开时间最长的 App 了.并不是应为网易云上面的歌曲多,而是因为那些走心的评论.边听歌边刷评论,感觉就像是走进了他人的人生之中,从另外一种意 ...
- java小说目录提取_完整Java爬取起点小说网小说目录以及对应链接
完整Java爬取起点小说网小说目录以及对应链接 完整Java爬取起点小说网小说目录以及对应链接 (第一次使用markdown写,其中的排版很不好,望大家理解) ?? 因为最近有一个比赛的事情,故前期看 ...
- 【Python从零到壹】使用XPath解析数据爬取起点小说网数据
我们已经可以从网上爬取数据了,现在我们来看看如何对数据解析 文章目录 1. xpath 的介绍 优点: 安装lxml库 XML的树形结构: 选取节点的表达式举例: 2. 爬取起点小说网 在浏览器中获取 ...
- pythontime模块计算时长_用python的time模块查看你出生多长时间了
time模块的应用查看出生了多长时间 查看银行卡解封时间 1.查看出生了多长时间 这里我们使用time模块计算我们出生了多长时间 import time # 导入时间模块 b = input('你的出 ...
- python里的英文歌叫什么_用Python分析韩国女团最喜欢的英文单词
原标题:用Python分析韩国女团最喜欢的英文单词 本文经Python中文社区(公众号ID:python-china) 授权转载,转载请联系出处 ♚ 盛光晓,粗通python,精通arcpy,某公司首 ...
- python简单实践作业答案_python入门实践四:爬取牛客网面试专项练习题及答案
说明:个人练手python用. 操作系统:window10 x64 IDE:Pycharm 2017.2.2 Python版本:3.6.2 目标 牛客网是一个IT笔试面试的平台,提供了很多题库,今天我 ...
- python黑客库长安十二时辰 更新_程序员爬取 3 万条评论,《长安十二时辰》槽点大揭秘!...
该剧总体评价如何? 优酷给<长安十二时辰>打出了8.8的高分(首播时为9.0分).该剧在豆瓣.IMDB.时光网等平台分别收获了8.6.8.5.8.4分,这足以说明该剧总体评价还是不错的. ...
- 爬取猫眼电影网前100的电影排名
爬取猫眼电影网前100的电影排名 猫眼电影网:http://maoyan.com/board/4 确定要爬取的数据: 1:排名 2:电影名称 3:主演 4:上映舌尖 5:评分 构造下一页url 首页: ...
最新文章
- 科学世界的人文关怀:开源科学与人工智能
- There is no getter for property named ‘col‘ in ‘class String‘,不是说一个参数不需要@Param注解吗?#{}和${}的区别
- 英语语法---谓语详解
- php无法下单功能,PHP如何解决并发下单问题?(不一定是下单,举个例)
- Python3中的hasattr()
- 微软借Bletchley项目将云计算信息加入区块链
- 数控机床手动编程能否用计算机验证,数控编程的方法有几种_数控编程的步骤...
- HDU 5510---Bazinga(指针模拟)
- Java集合中的retainAll()方法和removeAll()方法
- 三维空间曲面的切平面以及在某一点上的切线,法线
- HP惠普笔记本Microsoft ACPI Compliant System未知设备的解决办法
- Self-Supervised Learning 自监督学习中Pretext task的理解
- 双月报8.24-10.23
- 事后诸葛亮-团队总结
- ES的mapping配置详解
- 14个适合后台管理系统开发的前端框架,建议收藏!
- 陈学智升任VMware全球副总裁、大中华区总裁,面临四个挑战
- Android内存优化之图片优化
- git(9)Git 内部原理,java入门视频百度网盘
- 计算机组成原理中LD,计算机组成原理课件第三章计算机中的数据表示.ppt