【Python实战】爬取网易云音乐用户听歌排行,来制作一张Ta最爱歌手的词云图

前言

大家好,我是Samaritan。
平时写代码的时候,作为云村用户的一员,我当然也是最爱开着网易云音乐(以下简称网易云)。
大家都知道在网易云里你可以查看好友或是任意用户的听歌排行(假使Ta设置全部可见),但是如果想知道Ta喜欢哪些歌手,其中又有哪几个是Ta的最爱呢?很可惜,网易云并没有直接提供信息。
如果不会编程,你将怎么做?

一、网易云和词云

想知道Ta在网易云所有时间喜爱和最爱的歌手,逻辑上讲:
你可以基于Ta的所有时间听歌排行,手动记录他排行中前100首听得最多的歌曲的歌手/音乐人(以下统称为歌手),然后根据记录的信息统计重复出现的歌手次数,以此可以推断出Ta更喜欢的歌手,而余下这些不重复人名也都是Ta喜欢的歌手。
不过显然这样用眼睛看、记录、比对非常的麻烦,几乎不具有可行性。但是我们用python去实现上述逻辑,就没有很大的难度,这里会用到爬虫技术来代替我们去看、去记录,再使用词云图展示和对比出Ta喜爱的歌手。

词云是什么?
简单介绍一下:“词云”,英文’wordle’,这个概念由美国西北大学新闻学副教授、新媒体专业主任里奇·戈登(Rich Gordon)提出。他一直很关注网络内容发布的最新形式——即那些只有互联网可以采用而报纸、广播、电视等其它媒体都望尘莫及的传播方式。“词云”就是通过形成“关键词云层”或“关键词渲染”,对网络文本中出现频率较高的“关键词”的视觉上的突出。
词云图过滤掉大量的文本信息,使浏览网页者只要一眼扫过文本就可以领略文本的主旨。

来看一种最简单的词云图
在这里插入图片描述
是不是还蛮有趣的?
网上能做词云图的工具不少,虽然它们看起来也很好用,可功能都有些单一,适用范围有限。选择用Python来制作词云,不仅上手简单便利,而将各种模块组合起来合理调用,更是功能强大且自定义广。
看完了这篇文章,你马上就能做出一张比上面示例图更好看的词云图。
说完了思路,现在来跟着我动手吧~

二、用户听歌排行

在正式开始之前,先说明一下,博主使用的IDE是pycharm,如果你用vscode或者jupyter notebook之类的都是没影响的,如有软件操作问题,请自行百度解决哦。

回到正题,我们先来看网易云:
进入网易云音乐随便找一个用户:

在这里插入图片描述
点击进入Ta的主页:
在这里插入图片描述
在用户主页如果能看到听歌排行,那就说明Ta设置为可见。那我们接着就可以点右下角查看更多,前往完整听歌排行的页面。注意右上角,这些操作都是不需要我们登录自己账号的,这样在爬取时很方便。
随意进入一个用户的完整听歌排行页面:
在这里插入图片描述
可以看到url发生了变化,同时展示的歌曲比主页多了很多,最多为Ta听歌排行的前100首。
我们要爬取的就是这个页面,来观察此时的url:
https://music.163.com/#/user/songs/rank?id=412091xxxx
(隐私问题我隐藏了用户最后四位数字)
可以看出url结构最后**?id=xxxx**,当用户设置听歌排行可见时,每次爬取不同用户的url的区别只是最后的id变更,至于id你可以通过访问该用户的任何页面从url最后获取(每人都是唯一且不同的)。

还记得吗?我们今天的目标是爬取所有时间听歌排行,所以请找到右上角最近一周的边上,点击切换到所有时间,再观察页面url:https://music.163.com/#/user/songs/rank?id=412091xxxx
哎呀,什么变化都没是吗?没关系。
对于这样的动态页面,我决定使用selenium来进行爬取比较偷懒 方便~

Selenium模块
简介:Selenium是一个用于测试网站的自动化测试工具,支持各种浏览器包括Chrome、Firefox、Safari等主流界面浏览器,同时也支持phantomJS无界面浏览器。简单来说它可以模拟人对浏览器的操作包括点击,输入删除文字,或是滚动屏幕等等。
要使用它,你需要先pip install selenium安装该模块,并且拥有上述浏览器中的一种,然后下载安装对应的驱动webdriver文件。具体安装细节,不会的朋友请自行搜索教程,非常简单,本篇不再赘述。
Tip:使用selenium可以异步加载动态网页,将它变成静态网页后再交由bs4解析,是我常用的好搭档。

回到正题,我们有了url,也决定了使用什么方法爬取,接着我们来找每一首音乐的歌手在网页的位置:
开局一个F12,所有标签全靠ctrl+f~
打开开发者工具(F12)后,到Elements里找歌手信息位置:
在这里插入图片描述
使用工具里箭头选中歌手名字看到:
在这里插入图片描述
标出来的标签和属性都是可以方便我们等下定位到歌手信息的,而且找到一个就可以找到全部了,所有的歌手信息最后都
藏在< li >里:

在这里插入图片描述
现在url、爬取方法、信息标签定位都已经齐全,可以开始写代码了!

三、爬取歌手代码

以我用的chrome浏览器为例写代码。
先来导入模块,我们先要用到selenium、bs4和time模块:

import time
from selenium import webdriver
from bs4 import BeautifulSoup

构建url以及设置等下要用到的变量名:

uid = '41209xxxx'#随时可替换用户id
url_recd = 'https://music.163.com/#/user/songs/rank?id='+uid#构建爬取url
unknown = '未知'#特殊情况下错误提示用
asingerlist = []#储存所有时间排行中所有歌手的列表
start = time.time()#设置计时器
samaritan =webdriver.Chrome()#webdriver实例化

接着创建一个负责爬取目标用户所有时间听歌排行的方法好像就可以成功了?因为我们刚刚已经定位到了歌手文本信息。
可是这里有个坑~如果你直接用selenium定位或bs4解析定位尝试刚才的标签的话会什么都找不到。
因为仔细看elements里:
在这里插入图片描述
这里是iframe页面嵌套,如果不能进入iframe里面,是不能定位到任何在它里面的标签的。
幸运的是这对selenium来说仍然不是问题:

def get_record():#创建获取歌手信息的方法samaritan.get(url_recd)#实例化对象访问urlsamaritan.switch_to.frame('g_iframe')#找到指定iframe标签(这里是g_iframe)然后跳入samaritan.implicitly_wait(10)#隐式等待checkall = samaritan.find_element_by_id('songsall')#定位到切换到所有时间的按钮标签checkall.click()#模拟鼠标点击查看所有时间下的听歌排行samaritan.implicitly_wait(10)#隐式等待time.sleep(0.5)#这里还需要强制等待加载时间,一般一秒内就可以了htmlrec = samaritan.page_source#此时网页成为静态页面,获取所有页面信息pagerec = BeautifulSoup(htmlrec, 'html.parser')#使用bs4解析静态网页allrec = pagerec.find(class_="g-wrap p-prf").find(class_="m-record").find(class_="j-flag").find_all('li')#定位该位置下所有<li>的标签try:#使用try except结构防止意外报错中断运行for i in allrec:#遍历刚才位置下每一个<li>标签内信息asinger = i.find(class_="s-fc8").text.replace('-', '')#定位并获取歌手文本信息,再用replace方法清洗文本去掉歌名和各种之间连结的'-'asingerlist.append(asinger)#将干净的歌手文本加入列表except:print(unknown)#如遇到意外,提示'未知'。

最后调用方法以及查看结果:

get_record()#调用爬取方法
samaritan.close()#关闭浏览器
end = time.time()#结束计时
print(asingerlist)#打印所有歌手列表
print(f'总共用时:{end-start}秒')#打印程序用时输出结果:
[' Matteo', ' Russ', ' 永彬Ryan.B/AY楊佬叁', ' DP龙猪/宝楽CNBALLER/CLOUDWANG\xa0王云',' 音阙诗听', ' Deep\xa0Chills/IVIE', ' 白小白', ' Fly\xa0Project', ' 金志文'...... #以下省略]总共用时:4.079788398742676

只要四秒钟,我们就完成了对目标用户所有时间听歌排行的歌手爬取。
但是这样一点看不清啊,而且怎么知道哪些歌手更被偏爱呢?
接下去我们就要把这个歌手列表里的内容制作成一目了然的词云图了~

四、制作歌手词云

制作词云我们还需要用到以下模块:
os
PIL
numpy
matplotlib
wordcloud

这些模块的安装使用也不在本篇讲解了,只是展示给大家这种实战情况下如何调用,有兴趣的一样可以自行搜索深入学习。

开始制作词云,依旧先导入模块:

from os import path
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import colors
from wordcloud import WordCloud

我们用wordcloud的方法处理文本,以生成词云。
无论是你从表格文件还是txt文本还是直接爬取到的数据,只要是字符串就可以给他处理,所以这一步先要将刚才的歌手列表变成wordcloud可以处理的字符串:

astext = ','.join(asingerlist)
#将列表所有元素依序合并成字符串,并用'逗号'连接

是的你没看错,一行代码就ok了!因为我们在加入列表前已经做了数据清洗。
我之前说了,这个词云图要做出比上面举例的那张好看才行,所以我们给它戴一个’面具’mask:
模板图片love.png
在这里插入图片描述

d = path.dirname(__file__)
#获取当前文件路径
alice_mask = np.array(Image.open(path.join(d,"love.png")))
#读取模板的图片

非常简单,就两行代码。这里我用了PIL模块读取的图片,也可以使用别的模块比如imageio、opencv等等都一样的。读取以后等下我们会在wordcloud参数设置里套用上它。
现在我们再来美化一下这个词云,我可以使它的颜色在丰富一些:

color_list=['r','g','b','y','pink','purple','orange','black']
#建立颜色数组,列表中的颜色可以随便改动,除了常用颜色英文名外,也可以直接使用RGB色值,例如'#FDF5E6'
colormap=colors.ListedColormap(color_list)
#调用颜色数组

万事俱备啦,现在设置wordcloud对象参数:

wc = WordCloud(
#创建wordcloud实例font_path='wqy-microhei.ttc',#设置字体路径,如果要制作的词云中有中文我们需要下载字体文件调用background_color="white",#设置图片背景色,默认为黑色,这里我觉得用白色比较好看max_words=1000,#设置显示最大单词数colormap=colormap,#设置字体颜色mask=alice_mask,#设置模板图片,戴上'面具'
)
wc.generate(astext)
#根据所有歌手信息的文本生成词云

词云到这里就做好啦,不过别急,现在运行是什么都看不见的哦!
我们需要通过matplotlib模块来展示图片:

plt.imshow(wc, interpolation='bilinear')
#生成词云图片
plt.axis("off")
# 关闭图像坐标系
plt.figure('singer')
#指定所绘图名称
plt.show()
#显示图片

准备好运行看看了吗,下面就是见证奇迹的时刻:
在这里插入图片描述
是不是一目了然?
Ta在网易云数据中最喜欢的歌手依次排序就是薛之谦、邓紫棋、Justin Bieber、ED Sheeran等~
字号从大到小可以说非常直观了。

结尾

到此为止整个实战项目全部完成,你已经掌握对任意网易云用户迅速了解其喜爱歌手的方法以及制作帅气的词云图。
接下去,无论想要爬取更多网易云上的信息也好,还是制作更加酷炫的词云图也罢,你需要不断的深入学习。但看到好的一面是,你能够以我这篇博文为基础拓展出去,兴趣会促使你自主学习更多的东西。
比如
jieba模块
,用来中文分词后制作词云,本篇没有到是因为中文都是歌手名字,不需要分词。如果你的文本是句子等,就会需要先用jieba模块,要去学习如何分词。
又比如wordcloud参数,你可以有更多设置选择:

max_font_size=50,
min_font_size=10,
#设置最大、最小字体
collocations=False,
#设置是否过滤重复关键字
stopwords=stopwords
#设置忽略显示的词,比如无意义的噪声词(因为、所以、这些、哪些、said、the等)

以及如果要保存你刚制作的词云图到指定路径:

wc.to_file(path.join(d,"wordcloud.jpg"))

等等、等等…
以上,这些一篇文章是远远说不完的,但是今天应该也讲了不少实用的干货~
最后,如果你还没动手写的话,别磨蹭了~
赶紧去制作一张Ta的词云图,分享给你的网易云好友来个惊喜吧!

题外话:
各位在写代码时喜欢听哪些音乐呢?
有好的音乐也请务必和我交流分享!
我主要就是电子纯音~

感谢您的耐心阅读,欢迎关注我共同讨论python和爬虫~学习编程这条路,我们一起走一段。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/33690.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一招搞定某易云歌曲评论并生成漂亮词图,想爬什么歌就爬什么歌,练手推荐

网易云音乐一直是一个非常棒的听歌平台&#xff0c;尤其是推荐算法&#xff0c;我个人觉得是比某Q音乐更得人心&#xff0c;一直以来都用的都是网易云来听歌。 今天我就来教大家一个爬取网易云任意歌曲的评论并生成特殊词图的方法&#xff0c;对爬虫感兴趣的小伙伴们可以去试试…

足足 8 项新功能,微信可以和好友一同听歌了

本文转载自IT之家 此前&#xff0c;iOS 版微信已经陆续推出过 8.0.8 和 8.0.9 两次更新&#xff0c;加入了很多新功能&#xff0c;但安卓这边却一直没有动静。在历经了多日等待后&#xff0c;微信 8.0.9 安卓版也终于出现了。此次官方直接跳过了 8.0.8 这个版本&#xff0c;主…

最新【2021.1.28】今日头条_signature 分析

最新【2021.1.28】头条_signature 分析 【温馨提示】:此文仅适用PC端web版本某日某条加密 最新今日头条sign加密更新了,看了看,比之前的坑增加了许多; 今日头条web版的请求主要参数是:_signature,已经取消了之前的as、cp参数; 话不多说,开整。。。 1.参数定位 这个…

微信订阅号内测大改版,这一次更像「今日头条」了

微信订阅号想要「新生」。 2018 年 6 月&#xff0c;微信大部分用户都看到了自己的新版订阅号。在订阅号的改版中&#xff0c;文章变为了卡片式的内容展示。所有公众号不再分享一屏的手机屏幕&#xff0c;而是根据用户的阅读习惯&#xff0c;常读、收藏获得更大的卡片展示区域。…

如何实现今日头条跳转到微信?

说到付费搜索流量推广&#xff0c;大家第一时间想到的肯定是百度&#xff01; 但真实做过百度的小伙伴知道&#xff0c;百度的智能推荐有多坑&#xff0c;如果没有自己调整成非智能推荐&#xff0c;那么流量费就会嗖嗖的消耗&#xff0c;却没有实际的收益。 头条的算法推荐跟…

今日头条最新_signature

本文仅供学习。 最新的今日头条sign参数的加密&#xff0c;链接是 https://www.toutiao.com/search/?keyword%E6%96%B0%E9%97%BB。 f12之后刷新网页 加密参数名称为_signature,然后全局搜索一下这个名字。 直接在这一行打断点&#xff0c;然后点击那个tacsign方法会到这里&a…

今日头条android+x86,GitHub - teajoyus/TouTiao: 今日头条 For Android

今日头条App 作为一个Web开发者&#xff0c;正好学校学习Android课程&#xff0c;所以跟着一起学习Android开发 &#xff0c;作为我个人来说&#xff0c;学习一门语言不是看多少的书&#xff0c;而是首先上网学习基础知识&#xff0c;来github学习前辈们的项目源码&#xff0c;…

ChatGPT到底有多厉害,看看各个行业专家怎么说

我从2020年开始做AI传播&#xff0c;由于是非专业出身&#xff0c;这几年一直在努力学习和消化&#xff0c;也希望让更多非专业人士能懂AI。 ChatGPT&#xff08;中文&#xff1a;小发猫&#xff09;兴起后&#xff0c;我以最大热情去阅读论文和各种专业材料&#xff0c;包括反…

ChatGPT 因何爆火?

ChatGPT为什么会如此火热和流行呢&#xff1f;体验过的朋友应该都有类似的感觉&#xff1a;它的回答内容几乎和真人聊天的感觉类似&#xff0c;聊天的上下文有连贯的逻辑性&#xff0c;尤其让人震撼的是&#xff0c;它能够根据用户的描述直接写一段代码、写论文、写报告。 Chat…

智能医疗的主要应用场景和数据标注的关系

智能医疗是通过打造健康档案区域医疗信息平台&#xff0c;利用最先进的物联网技术&#xff0c;实现患者与医务人员、医疗机构、医疗设备之间的互动&#xff0c;逐步达到信息化。 随着科技的进步&#xff0c;医疗行业也将融入更多人工智能&#xff0c;使医疗服务走向真正意义上…

【AI+医疗】人工智能在健康业务和临床管理中的应用

来源&#xff1a;专知 本文为书籍介绍&#xff0c;建议阅读5分钟这本实用的书是第一本描述AI可以帮助解决有害的医疗保健问题的当前和未来用例的书。 人工智能将改变医疗健康的方方面面&#xff0c;包括我们管理个人健康的方式&#xff0c;从客户体验和临床护理到降低医疗保健成…

医疗知识图谱问答系统探究

1、项目背景 中科院软件所刘焕勇老师在github上的开源项目&#xff0c;基于知识图谱的医药领域问答项目QABasedOnMedicaKnowledgeGraph。 项目地址&#xff1a;https://github.com/liuhuanyong/QASystemOnMedicalKG 本人为小白&#xff0c;然后一步步完成的。 知识图谱构建&am…

服务器温度3d显示,智能问答助手、3D可视化展示,腾讯医典“黑科技”助力科普更有温度...

创新科技与医学科普的融合&#xff0c;将带来什么样的变化&#xff1f; 5 月21- 23 日&#xff0c;腾讯全球数字生态大会在云南昆明举办。在智慧医疗专场&#xff0c;腾讯医典正式发布其在医学科普领域的两大前沿探索&#xff1a;智能问答助手&#xff0c;借助系统化医学知识图…

医疗保健数据接口_医疗保健中的人工智能

医疗保健数据接口 Introduction 介绍 Artificial intelligence refers to simulating the behavior of humans, so that machines can be programmed to perform intelligent behavior and mimic human actions. It is a branch of computer science dealing with building sm…

思腾合力 AI 医疗行业解决方案,高效提升诊断效率与服务质量

AI 赋能医疗&#xff0c;人工智能医疗简单说即以互联网为依托&#xff0c;通过基础设施的搭建及数据的收集&#xff0c;将人工智能技术及大数据服务应用于医疗行业中&#xff0c;提升医疗行业的诊断效率及服务质量。 在我国&#xff0c;人口老龄化、慢性病高速增长、医疗资源供…

互联网+智慧医疗:基于Python打造智慧医院项目之智能分诊

智慧医疗英文简称WIT120&#xff0c;是最近兴起的专有医疗名词&#xff0c;通过打造健康档案区域医疗信息平台&#xff0c;利用最先进的物联网技术&#xff0c;实现患者与医务人员、医疗机构、医疗设备之间的互动&#xff0c;逐步达到信息化。 随着计算机科学技术的飞速发展&am…

在线付费问诊互联网医院智慧医疗系统包含哪些功能

伴随着互联网的发展&#xff0c;互联网医疗的互联网医院应运而生。在线付费问诊能够完成快捷的线上医疗服务板块&#xff0c;让有需求的用户能够只需求通过渠道就能够完成医疗问诊过程&#xff0c;大大提高了用户在治病就医方面的体验感&#xff0c;同时也能缓解线下门诊科室就…

智慧医疗时代的数据标注如何更精准?

随着我国经济的不断增长&#xff0c;以及生命科学的迅速发展&#xff0c;国人预期寿命有了显著的提升。2019年&#xff0c;国人预期寿命达到了77.3岁&#xff0c;比1960年提高了33岁。人们的健康需求在人口老龄化等一系列因素的影响下持续增长&#xff0c;这意味着卫生系统将面…

医疗行业售前100问之第3问:医院的常用信息系统有哪些?

医院内网的常用信息系统&#xff1a; 公认的医院核心信息系统有4个&#xff1a;HIS、EMR、PACS、LIS。 HIS&#xff08;医院管理信息系统&#xff09; 简称HIS&#xff0c;以财务信息、病人信息和物资信息为主线&#xff0c;通过对信息的收集、存储、传递、统计、分析、综合查…

医疗行业的新选择:智能医疗管理模板

随着社会的发展&#xff0c;医疗行业也在不断地进步与发展&#xff0c;信息化已经成为医疗行业的重要一环。智能医疗管理应用作为新型医疗管理工具&#xff0c;已经成为中小型医院、门诊、美容机构等企业的必备软件之一。该应用包括患者管理、预约管理、诊断管理、住院管理、财…