本文的文字及圖片來源于網路,僅供學習、交流使用,不具有任何商業用途,如有問題請及時聯系我們以作處理,
以下文章來源于羅羅攀 ,作者羅羅攀
剛接觸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[@]/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分詞,制作許嵩歌詞的詞云,
許嵩的歌偏悲傷愛情,通過詞云也可以修剪來,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/228074.html
標籤:其他
上一篇:Java基本概念:介面
下一篇:每天一篇代碼系列(3)
