• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

分析许嵩的175首歌曲,看看大家为什么那么喜欢听他的歌

python 搞java代码 3年前 (2022-05-21) 16次浏览 已收录 0个评论

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

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

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

https://v.douyu.<a href="https://www.gaodaima.com/tag/com" title="查看更多关于com的文章" target="_blank">com</a>/author/y6AZ4jn9jwKW

www#gaodaima.com来源gaodai#ma#com搞*代#码网搞代码

 

前言

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

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

 

网页分析

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

 

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

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

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

 

爬虫代码

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

<span>from</span> selenium <span>import</span><span> webdriver
</span><span>from</span> lxml <span>import</span><span> etree
</span><span>import</span><span> time
</span><span>import</span><span> csv

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

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

 

 

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

<span>def</span><span> foo1(singer):    
</span><span>if</span> <span>"</span><span>许嵩</span><span>"</span> <span>in</span><span> singer:
    </span><span>return</span> <span>"</span><span>no cover</span><span>"</span>
<span>else</span><span>:
    </span><span>return</span> <span>"</span><span>cover</span><span>"</span>

<span>def</span><span> foo2(song):
    </span><span>if</span> <span>"</span><span>伴奏</span><span>"</span> <span>in</span><span>  song:
        </span><span>return</span> <span>"</span><span>是</span><span>"</span>
    <span>else</span><span>:
        </span><span>return</span> <span>"</span><span>否</span><span>"</span><span>

music[</span><span>"</span><span>原创</span><span>"</span>] = music[<span>"</span><span>singer</span><span>"</span><span>].apply(foo1)
music[</span><span>"</span><span>伴奏</span><span>"</span>] = music[<span>"</span><span>song</span><span>"</span><span>].apply(foo2)

music[(music[</span><span>"</span><span>原创</span><span>"</span>] == <span>"</span><span>no cover</span><span>"</span>) & (music[<span>"</span><span>伴奏</span><span>"</span>]== <span>"</span><span>否</span><span>"</span>)].to_csv(<span>"</span><span>music_original.csv</span><span>"</span>,index=None,encoding=<span>"</span><span>utf-8</span><span>"</span>

 

 

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

<span>import</span><span> requests
</span><span>import</span><span> re
</span><span>import</span><span> json


url </span>= <span>""</span><span>

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


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

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

 

 

数据分析

01数据基本情况

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

02专辑单曲数

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

 

03歌词词云

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

 

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


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:分析许嵩的175首歌曲,看看大家为什么那么喜欢听他的歌

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址