Python数据可视化:网易云音乐歌单

640?wx_fmt=gif

作者 | 小F

来源 | 法纳斯特


网易云音乐2018年度听歌报告—遇见你,真好


相信有不少人在上周,应该已经看过自己网易云音乐的年度报告了。


小F也是去凑凑热闹,瞅了一波自己的年度听歌报告。


那么你在云村又听了多少首歌,听到最多的歌词又是什么呢?


2018年你的年度歌手又是谁,哪些又是你最爱的歌呢?


不过相比去年,我的票圈并没有很多发自己年度报告的朋友。


不得不说,版权之争开始,网易云音乐似乎就在走下坡路。


很多喜欢的歌听不了,这应该是大家共同的痛点。


最大的印象就是周董的歌,在愚人节时下架了,原以为只是个玩笑,不想却是真的。


本次通过对网易云音乐华语歌单数据的获取,对华语歌单数据进行可视化分析。


可视化库不采用pyecharts,来点新东西。


使用matplotlib可视化库,利用这个底层库来进行可视化展示。



/ 01 / 网页分析


01 歌单索引页


640?wx_fmt=png


选取华语热门歌单页面。


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


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


02 歌单详情页


640?wx_fmt=png


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


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


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


需要用selenium去获取信息,鉴于耗时过长,小F选择放弃...


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



/ 02 / 数据获取


01 歌单索引页


 
  

from bs4 import BeautifulSoup
import requests
import time

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 range(0133035):
    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 + '\n')


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


640?wx_fmt=png


02 歌单详情页


 
  

from bs4 import BeautifulSoup
import pandas as pd
import requests
import time

df = 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('\n''').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 + '\n')
    # 获取歌单内歌曲名称
    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() + '\n')


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


640?wx_fmt=png


1302张歌单里的121118首歌。


640?wx_fmt=png



/ 03 / 数据可视化


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


01 歌曲出现次数 TOP10


640?wx_fmt=png


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


那么你又是如何的呢?


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


02 歌单贡献UP主 TOP10


640?wx_fmt=png


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


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


03 歌单播放量 TOP10


640?wx_fmt=png


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


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


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


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


04 歌单收藏量 TOP10


640?wx_fmt=png


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


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


05 歌单评论数 TOP10


640?wx_fmt=png


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


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


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


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


小F武侠小说看的少,武侠电视剧看的多...


06 歌单收藏数量分布情况


640?wx_fmt=png


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


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


07 歌单播放数量分布情况


640?wx_fmt=png


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


其中ln(10000000)=16。


08 歌单标签图


640?wx_fmt=jpeg


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


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


「流行」没啥好说的。


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


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


09 歌单介绍词云图


640?wx_fmt=png


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


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



/ 04 / 总结


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


640?wx_fmt=jpeg


640?wx_fmt=jpeg


640?wx_fmt=jpeg

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


有兴趣的,可以后台回复“网易云音乐”查看。


千山万水总是情,点个「好看」行不行。


◆ ◆ ◆  ◆ ◆


长按二维码关注我们



数据森麟公众号的交流群已经建立,许多小伙伴已经加入其中,感谢大家的支持。大家可以在群里交流关于数据分析&数据挖掘的相关内容,还没有加入的小伙伴可以通过扫描下方管理员二维码,让管理员帮忙拉进群,期待大家的加入。


管理员二维码:


猜你喜欢

● 

● 

● 

● 

支持小F原创  

  • 6
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 25
    评论
好的,下面是Python爬虫实战,matplotlib模块,Python实现网易音乐歌单数据的教程。 1. 网易音乐歌单数据爬取 首先,我们需要使用Python爬虫来获取网易音乐歌单数据。我们可以使用 requests 库来向网站发送请求,然后使用 BeautifulSoup 库来解析页面中的 HTML 代码。 以下是一个简单的 Python 爬虫脚本,可以用来获取指定歌单的歌曲信息: ```python import requests from bs4 import BeautifulSoup url = 'https://music.163.com/playlist?id=21566666' # 歌单的链接 headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'} response = requests.get(url, headers=headers) soup = BeautifulSoup(response.content, 'html.parser') tracks = soup.select('ul.f-hide li a') for track in tracks: print(track.text) ``` 这个脚本将会输出指定歌单中的所有歌曲名称。 2. 数据 接下来,我们需要使用 matplotlib 库来对获取到的数据进行可。 我们可以使用 matplotlib 的 bar() 函数来创建柱状图。首先,我们需要创建两个列表,一个列表存储歌曲名称,另一个列表存储歌曲播放次数。然后,我们可以使用 bar() 函数来创建柱状图。 以下是一个简单的 Python 脚本,可以用来实现这个功能: ```python import requests from bs4 import BeautifulSoup import matplotlib.pyplot as plt url = 'https://music.163.com/playlist?id=21566666' # 歌单的链接 headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'} response = requests.get(url, headers=headers) soup = BeautifulSoup(response.content, 'html.parser') tracks = soup.select('ul.f-hide li a') song_names = [] play_counts = [] for track in tracks: song_names.append(track.text) data_url = 'https://music.163.com/api/song/detail/?ids=[{}]'.format(track['href'].split('=')[-1]) response = requests.get(data_url, headers=headers) data = response.json() play_counts.append(data['songs'][0]['popularity']) plt.bar(song_names, play_counts) plt.xticks(rotation=90) plt.show() ``` 这个脚本将会输出一个柱状图,横轴表示歌曲名称,纵轴表示歌曲播放次数。 3. 结论 通过这个简单的例子,我们可以看出,Python 爬虫和数据是非常有用的工具,它们可以帮助我们获取数据并对数据进行分析和可。如果你对这些工具感兴趣,可以自己尝试使用它们来实现更多的功能。
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值