纵有疾风起
人生不言弃

Python爬虫+可视化实例:网易云音乐歌单

/ 01 / 网页分析

01 歌单索引页

Python爬虫+可视化实例:网易云音乐歌单插图
image

选取华语热门歌单页面。

获取歌单播放量,名称,及作者,还有歌单详情页链接。

本次一共获取了1302张华语歌单。

02 歌单详情页

Python爬虫+可视化实例:网易云音乐歌单插图1
image

获取歌单详情页信息,信息比较多。

有歌单名,收藏量,评论数,标签,介绍,歌曲总数,播放量,收录的歌名。

这里歌曲的时长、歌手、专辑信息在网页的iframe中。

需要用selenium去获取信息,鉴于耗时过长,笔者选择放弃…

有兴趣的小伙伴,可以试一下哈…

/ 02 / 数据获取

01 歌单索引页

from bs4 import BeautifulSoupimport requestsimport timeheaders = {    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}for i in range(0, 1330, 35):    print(i)    time.sleep(2)    url = 'https://music.163.com/discover/playlist/?cat=欧美&order=hot&limit=35&offset=' + str(i)    response = requests.get(url=url, headers=headers)    html = response.text    soup = BeautifulSoup(html, 'html.parser')    # 获取包含歌单详情页网址的标签    ids = soup.select('.dec a')    # 获取包含歌单索引页信息的标签    lis = soup.select('#m-pl-container li')    print(len(lis))    for j in range(len(lis)):        # 获取歌单详情页地址        url = ids[j]['href']        # 获取歌单标题        title = ids[j]['title']        # 获取歌单播放量        play = lis[j].select('.nb')[0].get_text()        # 获取歌单贡献者名字        user = lis[j].select('p')[1].select('a')[0].get_text()        # 输出歌单索引页信息        print(url, title, play, user)        # 将信息写入CSV文件中        with open('playlist.csv', 'a+', encoding='utf-8-sig') as f:            f.write(url + ',' + title + ',' + play + ',' + user + '') 

获取歌单索引页信息如下,共1302张华语歌单。

Python爬虫+可视化实例:网易云音乐歌单插图2
image

02 歌单详情页

from bs4 import BeautifulSoupimport pandas as pdimport requestsimport timedf = pd.read_csv('playlist.csv', header=None, error_bad_lines=False, names=['url', 'title', 'play', 'user'])headers = {    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}for i in df['url']:    time.sleep(2)    url = 'https://music.163.com' + i    response = requests.get(url=url, headers=headers)    html = response.text    soup = BeautifulSoup(html, 'html.parser')    # 获取歌单标题    title = soup.select('h2')[0].get_text().replace(',', ',')    # 获取标签    tags = []    tags_message = soup.select('.u-tag i')    for p in tags_message:        tags.append(p.get_text())    # 对标签进行格式化    if len(tags) > 1:        tag = '-'.join(tags)    else:        tag = tags[0]    # 获取歌单介绍    if soup.select('#album-desc-more'):        text = soup.select('#album-desc-more')[0].get_text().replace('', '').replace(',', ',')    else:        text = '无'    # 获取歌单收藏量    collection = soup.select('#content-operation i')[1].get_text().replace('(', '').replace(')', '')    # 歌单播放量    play = soup.select('.s-fc6')[0].get_text()    # 歌单内歌曲数    songs = soup.select('#playlist-track-count')[0].get_text()    # 歌单评论数    comments = soup.select('#cnt_comment_count')[0].get_text()    # 输出歌单详情页信息    print(title, tag, text, collection, play, songs, comments)    # 将详情页信息写入CSV文件中    with open('music_message.csv', 'a+', encoding='utf-8-sig') as f:        f.write(title + ',' + tag + ',' + text + ',' + collection + ',' + play + ',' + songs + ',' + comments + '')    # 获取歌单内歌曲名称    li = soup.select('.f-hide li a')    for j in li:        with open('music_name.csv', 'a+', encoding='utf-8-sig') as f:            f.write(j.get_text() + '')

获取的1302张华语歌单的详情。

Python爬虫+可视化实例:网易云音乐歌单插图3
image

1302张歌单里的121118首歌。

Python爬虫+可视化实例:网易云音乐歌单插图4
image

/ 03 / 数据可视化

可视化代码已上传GitHub,点击左下角阅读原文即可访问!!!

****01 歌曲出现次数 TOP10****

Python爬虫+可视化实例:网易云音乐歌单插图5
image

榜上的十首歌,除了「水星记」,笔者听得次数都不少。

那么你又是如何的呢?

在笔者的印象里,这些歌都曾在网易云音乐热歌榜的榜首出现过。

******02 歌单贡献UP主 TOP10******

Python爬虫+可视化实例:网易云音乐歌单插图6
image

10大歌单贡献UP主,感谢这些辛勤的“搬运工”,给大家带来优质的歌单。

给广大懒人癌患者,亦或选择困难症患者,带来福利。

03 歌单播放量 TOP10

Python爬虫+可视化实例:网易云音乐歌单插图7
image

歌单播放量前十名单,第一名7000多万播放量。

其实matplotlib生成的图是挺清楚的,只不过一上传就变模糊了。

所以这里你可能会觉得图片质量不行…

其实并不是,为此笔者做了相应的图表,具体见文末~

04 歌单收藏量 TOP10

Python爬虫+可视化实例:网易云音乐歌单插图8
image

同样是好东西,收藏收藏!!!

有一些歌单和播放量TOP10里歌单有重复。

05 歌单评论数 TOP10

Python爬虫+可视化实例:网易云音乐歌单插图9
image

歌单「再见大侠:武侠小说泰斗金庸逝世」评论数最多。

相信不少人的阅读时光,就是与金庸前辈的武侠小说一起度过。

飞雪连天射白鹿,笑书神侠倚碧鸳。

还有由小说改编成的电视剧,都是经典!!!

笔者武侠小说看的少,武侠电视剧看的多…

****06 歌单收藏数量分布情况****

Python爬虫+可视化实例:网易云音乐歌单插图10
image

将收藏数做对数处理,使得能直观看出歌单收藏数的分布。

主要分布在0-15万之间(ln(150000)=12)。

******07 歌单播放数量分布情况******

Python爬虫+可视化实例:网易云音乐歌单插图11
image

歌单播放数主要分布在0-1000万。

其中ln(10000000)=16。

08 歌单标签图

Python爬虫+可视化实例:网易云音乐歌单插图12
image

既然选取的是华语歌单,那么华语这二字必不可少,而且还占大头。

那么就看看除了华语,还有什么其他标签。

「流行」没啥好说的。

「古风」「说唱」「民谣」近些年来热度是越来越高,不过也有玩坏的时候。

比如「离人愁」、「一人我饮酒醉」,笔者作为吃瓜群众,只能说且行且珍惜…

09 歌单介绍词云图

Python爬虫+可视化实例:网易云音乐歌单插图13
image

歌单介绍词云图,希望你能找到你喜欢某首歌的原因!!!

到底是希望,还是青春,亦或是回忆呢?

/ 04 / 总结

最后,把本次搜刮的干货,分享给大家。

Python爬虫+可视化实例:网易云音乐歌单插图14
image
Python爬虫+可视化实例:网易云音乐歌单插图15
image
Python爬虫+可视化实例:网易云音乐歌单插图16
image

可视化及相关代码都放「GitHub」上头了。

GitHub:https://github.com/Tobby-star/music_163

文章转载于:https://www.jianshu.com/p/19e8e37d993c

原著是一个有趣的人,若有侵权,请通知删除

未经允许不得转载:起风网 » Python爬虫+可视化实例:网易云音乐歌单
分享到: 生成海报

评论 抢沙发

评论前必须登录!

立即登录