zoukankan      html  css  js  c++  java
  • Python数据可视化:网易云音乐歌单

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

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

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

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

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

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

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

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

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

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

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

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

    / 01 / 网页分析

     

    01 歌单索引页

     

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

     

     

     

    选取华语热门歌单页面。

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

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

    02 歌单详情页

     

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

     

     

     

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

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

    这里歌曲的时长、歌手、专辑信息在网页的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(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数据可视化:网易云音乐歌单!

     

     

     

    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(' ', '').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数据可视化:网易云音乐歌单!

     

     

     

    1302张歌单里的121118首歌。

     

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

     

     

     

    / 03 / 数据可视化

     

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

    01 歌曲出现次数 TOP10

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

     

     

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

    那么你又是如何的呢?

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

    02 歌单贡献UP主 TOP10

     

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

     

     

     

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

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

    03 歌单播放量 TOP10

     

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

     

     

     

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

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

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

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

    04 歌单收藏量 TOP10

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

     

     

     

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

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

    05 歌单评论数 TOP10

     

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

     

     

     

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

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

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

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

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

    06 歌单收藏数量分布情况

     

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

     

     

     

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

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

    07 歌单播放数量分布情况

     

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

     

     

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

    其中ln(10000000)=16。

    08 歌单标签图

     

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

     

     

     

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

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

    「流行」没啥好说的。

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

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

    09 歌单介绍词云图

     

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

     

     

     

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

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

    / 04 / 总结

     

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

     

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

     

     

     

     

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

     

     

     

     

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

     

  • 相关阅读:
    ZeptoLab Code Rush 2015
    UVa 10048 Audiophobia【Floyd】
    POJ 1847 Tram【Floyd】
    UVa 247 Calling Circles【传递闭包】
    UVa 1395 Slim Span【最小生成树】
    HDU 4006 The kth great number【优先队列】
    UVa 674 Coin Change【记忆化搜索】
    UVa 10285 Longest Run on a Snowboard【记忆化搜索】
    【NOIP2016提高A组模拟9.28】求导
    【NOIP2012模拟10.9】电费结算
  • 原文地址:https://www.cnblogs.com/l520/p/10267034.html
Copyright © 2011-2022 走看看