美文网首页码农的世界
爱音乐的Python程序员,数据可视化网易云音乐歌单!

爱音乐的Python程序员,数据可视化网易云音乐歌单!

作者: b4a0155c6514 | 来源:发表于2019-01-10 15:41 被阅读1次

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

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

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

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

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

    爱音乐的Python程序员,数据可视化网易云音乐歌单!

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

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

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

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

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

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

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

    / 01 / 网页分析

    01 歌单索引页

    爱音乐的Python程序员,数据可视化网易云音乐歌单!

    选取华语热门歌单页面。

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

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

    02 歌单详情页

    爱音乐的Python程序员,数据可视化网易云音乐歌单!

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

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

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

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

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

    / 02 / 数据获取

    01 歌单索引页

    <pre style="-webkit-tap-highlight-color: transparent; box-sizing: border-box; font-family: Consolas, Menlo, Courier, monospace; font-size: 16px; white-space: pre-wrap; position: relative; line-height: 1.5; color: rgb(153, 153, 153); margin: 1em 0px; padding: 12px 10px; background: rgb(244, 245, 246); border: 1px solid rgb(232, 232, 232); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">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 + '
    ')
    </pre>

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

    爱音乐的Python程序员,数据可视化网易云音乐歌单!

    02 歌单详情页

    <pre style="-webkit-tap-highlight-color: transparent; box-sizing: border-box; font-family: Consolas, Menlo, Courier, monospace; font-size: 16px; white-space: pre-wrap; position: relative; line-height: 1.5; color: rgb(153, 153, 153); margin: 1em 0px; padding: 12px 10px; background: rgb(244, 245, 246); border: 1px solid rgb(232, 232, 232); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">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() + '
    ')
    </pre>

    获取的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程序员,数据可视化网易云音乐歌单!

    相关文章

      网友评论

        本文标题:爱音乐的Python程序员,数据可视化网易云音乐歌单!

        本文链接:https://www.haomeiwen.com/subject/yzearqtx.html