分析許嵩的175首歌曲,看看你們爲何那麼喜歡聽他的歌

本文的文字及圖片來源於網絡,僅供學習、交流使用,不具備任何商業用途,若有問題請及時聯繫咱們以做處理。html

如下文章來源於羅羅攀 ,做者羅羅攀web

剛接觸Python的新手、小白,能夠複製下面的連接去免費觀看Python的基礎入門教學視頻json

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

 

前言

是否還記得斷橋殘雪,一聽就是一下午 是否還記得認錯,上課前必點歌曲 是否還記得素顏,同桌那清秀的臉龐api

最近許嵩在開演唱會,幾乎機會,聽着許嵩的歌,作成此次分享,不由唏噓,咱們在慢慢的長大,竟記不起當年模樣。網絡

 

網頁分析

這裏,咱們進入網易雲音樂官網,找到許嵩的我的單曲。app

 

這裏是post請求,並且參數較複雜,因此使用硒來進行爬蟲,這裏除了獲取基本信息外,須要獲取每首歌的id,用於歌詞爬蟲。post

歌詞爬蟲,咱們使用下面的網址便可,換不一樣的id,就是不一樣歌的歌詞。學習

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

 

爬蟲代碼

首先是全部歌曲的爬蟲,使用硒,部分代碼見下。url

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的,而有些是伴奏,在下載歌詞以前,咱們對這些數據進行清洗,儘可能保證是許嵩原創並且不是伴奏的。spa

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分詞,製做許嵩歌詞的詞雲。

 

許嵩的歌偏悲傷愛情,經過詞雲也能夠修剪來。

相關文章
相關標籤/搜索