本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。

以下文章来源于罗罗攀 ,作者罗罗攀

刚接触Python的新手 、小白 ,可以复制下面的链接去免费观看Python的基础入门教学视频

https://v.douyu.com/author/y6AZ4jn9jwKW

 

前言

是否还记得断桥残雪,一听就是一下午 是否还记得认错,上课前必点歌曲 是否还记得素颜 ,同桌那清秀的脸庞

最近许嵩在开演唱会,几乎机会,听着许嵩的歌 ,做成这次分享,不禁唏嘘,我们在慢慢的长大 ,竟记不起当年模样。

 

网页分析

这里,我们进入网易云音乐官网,找到许嵩的个人单曲 。

 

这里是post请求 ,而且参数较复杂 ,所以使用硒来进行爬虫,这里除了获取基本信息外,需要获取每首歌的id ,用于歌词爬虫。

歌词爬虫,我们使用下面的网址即可,换不同的id ,就是不同歌的歌词。

http://music.163.com/api/song/lyric?id=1309642305&lv=1&kv=1&tv=-1

 

爬虫代码

首先是所有歌曲的爬虫,使用硒,部分代码见下 。

from selenium import webdriver
from lxml import etree
import time
import csv

def get_info(url):
    driver = webdriver.Chrome()
    driver.maximize_window()
    driver.get(url)
    driver.implicitly_wait(10)
    iframe = driver.find_elements_by_tag_name('iframe')[0]
    driver.switch_to.frame(iframe)
    html = etree.HTML(driver.page_source)
    infos = html.xpath('//div[@class="srchsongst"]/div')    
    for info in infos:
        song_id = info.xpath('div[2]/div/div/a/@href')[0].split('=')[-1]
        song = info.xpath('div[2]/div/div/a/b/text()')[0]
        singer1 = info.xpath('div[4]/div/a')[0]
        singer = singer1.xpath('string(.)')
        album = info.xpath('div[5]/div/a/@title')[0]       
        print(song_id,song,singer,album)
        writer.writerow([song_id, song, singer, album])

if __name__ == '__main__':
      fp = open('music.csv', 'w', newline='', encoding='utf-8')
     writer = csv.
     writer(fp)
     writer.writerow(['song_id', 'song', 'singer', 'album'])
     url = 'https://music.163.com/#/search/m/?s=%E8%AE%B8%E5%B5%A9&type=1'
     get_info(url)

 

 

在这些歌中 ,有些是cover的,而有些是伴奏,在下载歌词之前 ,我们对这些数据进行清洗,尽量保证是许嵩原创而且不是伴奏的。

def foo1(singer):    
if '许嵩' in singer:
    return 'no cover'
else:
    return 'cover'

def foo2(song):
    if '伴奏' in  song:
        return ''
    else:
        return ''

music['原创'] = music['singer'].apply(foo1)
music['伴奏'] = music['song'].apply(foo2)

music[(music['原创'] == 'no cover') & (music['伴奏']== '')].to_csv('music_original.csv',index=None,encoding='utf-8'

 

 

最后,我们根据前面的url ,下载歌词。

import requests
import re
import json


url = ''

headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'
}


def get_info(id):
    res = requests.get('http://music.163.com/api/song/lyric?id={}&lv=1&kv=1&tv=-1'.format(id),headers=headers)
    json_data = json.loads(res.text)
    lyric = json_data['lrc']['lyric']
    lyric = re.sub('\[.*\]','',lyric)
    return lyric

for i in range(music_original.shape[0]):
    try:
        fp = open('song/{}.txt'.format(music_original.iloc[i,1]),'w',encoding='utf-8')
        fp.write(get_info(music_original.iloc[i,0]))
        fp.close()
    except:
        pass

 

 

数据分析

01数据基本情况

许嵩歌曲共计175首 ,妥妥的原创高产歌手〜

02专辑单曲数

早期的许嵩,是一个网络歌手,所以都放在了许嵩单曲集中 ,随后发的苏格拉没有底,寻雾启示是很不错的优秀专辑 。

 

03歌词词云

最后利用jieba分词,制作许嵩歌词的词云。

 

许嵩的歌偏悲伤爱情 ,通过词云也可以修剪来。

文章来源于网络,如有侵权请联系站长QQ61910465删除
本文版权归去快排wWw.seogUrublog.com 所有,如有转发请注明来出,竞价开户托管,seo优化请联系qq❉61910465