小伙伴关心的问题:Python歌词爬取与分析:大张伟150首歌里用了多少个啦—哦—呀—呦—哒—啊—吧—哈—哩...?,本文通过数据整理汇集了Python歌词爬取与分析:大张伟150首歌里用了多少个啦—哦—呀—呦—哒—啊—吧—哈—哩...?相关信息,下面一起看看。

Q:为什么要做这个分析?A:纯娱乐。一方面因为兴趣正好在自学网页文字信息爬取,另一方面我爱大老师(*^▽^*)

用到的包:

importrequestsimportpandasaspdimportreimportmatplotlib.pyplotaspltfromwordcloudimportWordCloud,ImageColorGeneratorimportjieba

从魔镜网获取歌词

这是我第一次用Python爬取网页信息,参考了网上很多歌词爬取的教程,总结下来发现最多的是爬取网易云和QQ音乐的歌词。可惜如果歌曲数量大的话这些爬取需要设置代理,操作比较复杂,对新手不太友好。为了省事儿,我直接从魔镜歌词网(http://mojim.com)来获取歌词数据了,对于分析大老师歌词的目的来说足够用了。

首先,通过歌手页面获取歌手的歌曲目录和链接。

defgetSong *** ySinger(url):access singers pagewithrequests.Session()assession:response=session.get(url)singer_text=response.textGet a map of url to songshtm_name_pairs=re.findall(r(.*)\n,str(singer_text))htm2name={i:[a[0],a[1].split("<")[0],]fori,ainenumerate(htm_name_pairs)}returnhtm2name

接着通过歌曲链接进入歌曲页面,获取具体歌词部分。

defgetContentbySong(url):get the content of a spcific song pagewithrequests.Session()assession:response=session.get(url)text=response.textfilter the content to get lyric partcontent=re.findall(r" \n(.*)\n",str(text),re.DOTALL)[0]content_unescaped=re.split(|\n,html.unescape(content).replace(u"更多更详尽歌词 在 ※ Mojim.com\u3000魔镜歌词网",""))returncontent_unescaped

然后找到了大张伟和花儿乐队的歌手页面:

url_dzw=https://mojim.com/cnh107586-A2.htm大张伟url_flowers=https://mojim.com/cnh100271-A2.htm花儿乐队

信息爬取下来经过了简单的清洗和处理。我只保留了由他自己作词或参与作词的部分歌曲,筛选掉了其他一些他演唱但没有作词的歌。但因为数据清洗很粗略,可能有同一首歌不同标题的多个版本出现多次的现象,这会对后续的内容带来一定误差。以后有时间再改进这一部分。

清洗后剩下了145首歌,处理好的信息存入数据框:

歌词分析与词云绘制

接下来的歌词分析主要用到了结巴中文分词和Python的wordcloud包。

对每一句歌词用结巴进行了自动分词,然后对每个中英文词汇的出现次数进行了统计,以得到词频。

wordCount=dict()foridxinrange(len(df_nodup)):lyric=df.loc[idx,lyric].split("\n")forlinlyric:Get English words in the lineenglish=re.findall("[a-z,A-Z,0-9]+",l)context=re.sub("[a-z,A-Z,0-9,!,!,.,-,一,?,~,\u3000,(,)]+","",l)context = re.sub("[ ]+","",context)Get Chinese words in the line using Jiebaseg_list=jieba.cut(context,cut_all=False,HMM=False)chinese=[wforwinseg_listifw!=]words=english+chinesePut words into the dictionaryforwinwords:ifwinwordCount:wordCount[w]+=1else:wordCount[w]=1

在这些歌里,一共分出了4033个不同的中/英文词汇,词汇总数达到31,526。也就是说平均每个词出现了约7.8次。

这一步结束,就已经能回答标题里的问题了。

那么,大老师在这将近150首歌里,究竟用了多少个啦/哦/呀/呦/哒/啊/吧/哈/哩呢?答案是:

啦:487哦:290呀:214呦:193哒:182啊:178吧:171哈:157哩:118

o(*≧▽≦)ツ o(*≧▽≦)ツ o(*≧▽≦)ツ

接下来找了他新专(20是件更美好的事)作背景色,找了个好看的字体,绘制了歌词的词云。

back_color = plt.imread("dzw_bg.jpg") mask_color = ImageColorGenerator(back_color) wordcloud = WordCloud(background_color="white", max_words=1000, mask=back_color, max_font_size=256, random_state=5) wordcloud.generate_from_frequencies(frequencies=wordFreq) wordcloud.recolor(color_func=mask_color) plot wordcloud plt.figure(figsize=(10,10)) plt.imshow(wordcloud, interpolation=bilinear) plt.axis("off") plt.show() pass

我没有删除掉如我、的、了等常用词,所以它们在词云中非常显眼。

前1000个常用词的词云长这样:

一眼看过去,满屏大老师扑面而来!

如果画出所有词:

大老师更多了呢!

更多Python歌词爬取与分析:大张伟150首歌里用了多少个啦—哦—呀—呦—哒—啊—吧—哈—哩...?相关信息请关注本站,本文仅仅做为展示!