Python+pyecharts研究周杰伦歌词中的 秘密

一个朋友很喜欢周杰伦。

所以,前两天我跟别人去KTV,就唱的是“七里香”。

唱着唱歌,突然就好奇了起来。周杰伦的歌里,是不是还有很多的麻雀

后来发现,270首歌,140786个字,千言万语,说来说去,都是“我”,“的”,“你”

路人:咦,怎么没有你我他中的他

我:你我之间,没有他。

路人:不对啊,不是每首歌都是你呀我呀的吗这跟是不是周杰伦也没啥关系吧?

我:......我不听我不听。

还有去除所有单字的,只考虑词的。

等等,为毛......双节棍......三个字,出现的频率如此之高.... 

啥......阳光宅男里也有双截棍吗......宅男也用双截棍打人吗

本文完

--------------------------------源代码

url ='https://music.163.com/#/search/m/?id = 6452&limit = 100&offset = 100&s =%E5%91%A8%E6%9D%B0%E4%BC%A6&type = 1'

这个是网易云音乐里的关键词“周杰伦”的搜索结果。利用硒大法,可以强行弄出歌名歌手名歌曲编号。

http://music.163.com/api/song/media?id=186001  这个链接,不断替换后面的ID,可直接看到歌词JSON。

from selenium import webdriver
import re,time,requests,json
from bs4 import BeautifulSoup
import pandas as pd
driver = webdriver.Chrome()
url = 'https://music.163.com/#/search/m/?id=6452&limit=100&offset=100&s=%E5%91%A8%E6%9D%B0%E4%BC%A6&type=1'
driver.get(url)#自动爬取周杰伦歌曲的 歌曲代号/歌名/歌星
#反爬也不做了.什么时候停了,就是弄好了.
while True:driver.switch_to.default_content()driver.switch_to.frame("contentFrame")  # 2.用id来定位pattern=re.compile('/artist\?id=[0-9]+"><span class="s-fc7">(.*?)<.*?title="《(.*?)》">')html = driver.page_source soup= BeautifulSoup(html,'html.parser')list_song=[]for row in soup.find("div",{"class":"srchsongst"}):list_song.append([re.search('data-res-id="([0-9]+)"',str(row)).group(1),  #歌曲代号re.search('b title="(.*?)"',str(row)).group(1),   #歌名re.search(pattern,str(row)).group(1)])  #歌星print('Done')Data=pd.DataFrame(list_song)Data.to_csv(r"C:\Users\Jack\Desktop\OutData.csv",encoding = "utf-8",mode="a+",index=0,header=0)#翻页button = driver.find_element_by_xpath('//*[@id="auto-id-Uf7JxlNgQEttTgGT"]')button.click()time.sleep(1)#清洗出一个没有重复歌名的名单. (一首歌会有各种版本)
data=pd.read_csv("C:\\Users\\Jack\\Desktop\\outData.csv")
songData=data.values.tolist()newlist=[]
for i in  songData  :if re.sub(u"\\(.*?\\)|\\{.*?}|\\[.*?]|\s?\-", "",i[1]) not in [ i[1] for i in newlist]:  
#正则是为了洗出没有符号,尽可能简洁的歌曲名. 并且not in newlist 是为了保证不会重复newlist.append([i[0],re.sub(u"\\(.*?\\)|\\{.*?}|\\[.*?]|\s?\-", "",i[1]),i[2]])def load(songid):  #获取歌词信息url= 'http://music.163.com/api/song/media?id=' +str(row[0])r = requests.get(url,headers=headers)return json.loads(r.text)['lyric']list_new = []
for row in newlist:try:lyric = load(row[0])list_new.append([row[0],row[1],row[2],lyric])except:print('---')print(row[0])time.sleep(1)print('|',end='')time.sleep(0.2)
print('爬取歌词完成')#stopwords是为了防止进来奇怪的东西. 因为有些歌词里面是会夹杂歌手名的... 
#这样可去除异常的高词频的词,防止wordcloud异常.(人为控制啊你)
#用空格作间隔符,加快输入速度. 之前我可是输了两三行...
stopWords='周杰伦 录音师 录音室'
import jieba
list=[]
for i in jieba.cut_for_search(''.join([i[3] for i in list_new])):
#用jieba.cut_for_search,俗称 搜索引擎模式. 是为了尽可能保证一句话多拆成 词,而不是 字.word= (re.sub('[0-9.:\/\(\)\[\]\s:]+|\\r|\\n|[\u3002\uff1b\uff0c\uff1a\u201c\u201d\uff08\uff09\u3001\uff1f\u300a\u300b]','',i))if word != ''  and word not in stopWords.split(' ') :list.append(word)from pandas import DataFrame
df = DataFrame({"word":[i for i in list ],"count":1})df2 = df.groupby('word').count().sort_values(by = 'count',axis = 0,ascending = False)
df2.insert(0,"index",[i for i in df2.index])df2.columns=['word','count']wordlist=df2.values.tolist()from pyecharts import WordCloud
wordcloud = WordCloud('周杰伦歌词次云','Made By Jack',width=800, height=620)
wordcloud.add("",[i[0] for i in wordlist], [i[1] for i in wordlist], word_size_range=[10, 70],shape='pentagon')
wordcloud

这样子就能弄出歌词WordCloud啦〜

后来寻思着,唱歌是不是要讲究押韵来着?但是不知道啥叫必然的规律..

所以尝试了一下

yunmulist=[]
from pypinyin import lazy_pinyin
for row in [i[3].split('\n') for i in list_new]:for row2 in row:row3=re.sub('[\[\],.:\(\)\s)]|[0-9]','',row2)try:lastword = (row3[-1])word_pinyin =pinyin(lastword)if word_pinyin!=[]:yunmulist.append(lazy_pinyin(lastword,style=Style.FINALS_TONE, strict=False,errors='ignore'))except:passdf = DataFrame({"word":[i[0] for i in yunmulist if i !=[]],"count":1})
df.groupby('word').count().sort_values(by = 'count',axis = 0,ascending = False)
df2 = df.groupby('word').count().sort_values(by = 'count',axis = 0,ascending = False)
df2.insert(0,"index",[i for i in df2.index])df2.columns=['word','count']wordlist=df2.values.tolist()from pyecharts import Bar
wordcloud = Bar('周杰伦歌词韵母次云',width=1200, height=420)
wordcloud.add("",[i[0] for i in wordlist][0:30], [i[1] for i in wordlist][0:30], word_size_range=[20, 60],shape='pentagon')
wordcloud

只截取了前20的。前后差异太大了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/61430.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

周杰伦入局元宇宙,带你搞懂元宇宙怎么玩

自古以来&#xff0c;每个新兴产业的崛起&#xff0c;最关键、最重要的元素一定是流量&#xff0c;这对于元宇宙来说亦是如此。如果Facebook的入局元宇宙行业吸引了第一波市场流量&#xff0c;那么NBA球星史蒂芬库里、歌手林俊杰、周杰伦等明星入局的影响力就为“元宇宙”吸引了…

HTML网页设计:周杰伦网站

Hello朋友们&#xff01;我们又见面了&#xff01;是不是又到了焦头烂额忙期末设计的作业的时候了&#xff0c;不要担心&#xff0c;我来了&#xff0c;经过不懈的努力写出了一个比较容易懂的网页&#xff0c;完全足够应付你亲爱的老师的网页设计大作业&#xff01; 哦&#xf…

用matlab演奏周杰伦的《七里香》

问题描述 前几天在学习matlab的时候&#xff0c;发现了一篇用matlab演奏音乐的文章&#xff0c;不禁感叹matlab居然还能这么玩&#xff01;于是我就学着用matlab演奏我最喜欢听的一首歌——周杰伦的《七里香》。最后成果我已经发到B站&#xff0c;链接为&#xff1a;用matlab演…

WPF 消息传递简明教程

WPF 消息传递简明教程 独立观察员 2023 年 4 月 24 日 0、说明 参考&#xff1a;https://www.cnblogs.com/cdaniu/p/16852620.html 使用包&#xff1a;CommunityToolkit.Mvvm&#xff08;8.1.0&#xff09; 1、订阅 让需要使用消息的 ViewModel 继承 ObservableRecipient&#…

VMware官网注册账号之验证码问题

VMware官网注册账号之验证码问题 首先上个官网注册账号链接&#xff5e; https://my.vmware.com/zh/web/vmware/registration 点我访问官网注册 然后不出意外都会看见中文版页面 这时候不要着急注册&#xff0c;因为你会发现验证码是这个造型的 抓狂的时候来了&#xff0c;不…

ChatGpt3.5 使用小记001

使用了一段时间的ChatGpt。主要的用途是向它咨询些学习的问题。因为有些它的分类是对话形式的&#xff0c;所以&#xff0c;一定问题多了&#xff0c;自己都不好找。故此想稍做整理&#xff0c;在此留存。 1.英语学习类 英语单词类&#xff0c;主要是因为有些近义词在中文的翻…

chatgpt赋能Python-python3_5怎么打开

Python 3.5怎么打开&#xff1f;教你几种方法 Python是目前非常流行的一种编程语言&#xff0c;几乎在所有行业都得到了广泛的应用。Python非常容易上手&#xff0c;且有强大的数据处理和科学计算能力。现在我们来说一下&#xff0c;如何在您的计算机上打开Python 3.5。 方法…

python-openCV实现银行卡卡号识别

实现效果&#xff1a; code import cv2 as cv import numpy as np# 轮廓排序 默认从左到右 # --cnts 待排序的轮廓列表 # --method 排序方法 自上而下&#xff0c;从左到右等 def sort_contours(cnts, method"left-to-right"):# 初始化反向标志和排序索引reverse F…

opencv之银行卡号识别

1.项目背景 1.1 项目介绍 这个一个opencv的经典应用,所以用它来熟悉之前的一些操作。 1.2 项目目的 通过此程序可以识别出银行卡图片中包括的银行卡卡号。 2.项目介绍 此项目主要分为两部分:模板图片处理,银行卡图片处理。 模板图片: 银行卡图片示例: 2.1 模板图片处…

【OpenCV】银行卡号识别

文章目录 前言一、环境二、代码总结 前言 本文引用其他作者代码&#xff0c;本文仅供记录用。详细内容可看此处 一、环境 如果提示没有imutils模块就pip install imutils 提供一个字体模板文件和银行卡图片。可以右键保存。 字体模板文件&#xff1a; 银行卡图片&#xff1b…

opencv-python 银行卡卡号识别

模板&#xff1a; 银行卡&#xff1a; 主要思路&#xff1a;用遮盖法 将无关紧要的上面和下面部分截掉&#xff0c;保留银行卡号差不多的位置&#xff0c;然后用opencv做图像处理&#xff0c;得到四个 连着数字的小框框&#xff0c;然后再在四个小框框里面提取出每一个单个的…

使用 OpenCV 和 Python 识别信用卡号

使用 OpenCV 和 Python 识别信用卡号 在之前的博文中&#xff0c;我们学习了如何安装 Tesseract 二进制文件并将其用于 OCR。 然后我们学习了如何使用基本的图像处理技术来清理图像以提高 Tesseract OCR 的输出。 但是&#xff0c;不应将 Tesseract 视为能够获得高精度的光学…

OpenCV-Python 模板匹配的银行卡号识别

目录 实现流程模板数字处理对模板图片进行二值化处理对二值化后的图片进行轮廓检测确定每个模板数字的图像 银行卡图片处理预处理确定每组数字轮廓检测每个数字提取数字组中的数字 模板匹配附录完整代码 实现流程 对数字模板进行处理&#xff0c;提取出单一数字的图片&#xf…

银行卡验证接口API(仅需一行代码,实现全国银行卡核验)

银行卡确认在互联网越来越普及&#xff0c;在二手、电商、贷款、等主流互联网应用中都有明确的刚需&#xff0c;传统的 银行卡核验方式是用户上传图片&#xff0c;客服后台人肉审核&#xff0c;但问题在于根本无从确认 银行卡的真实性&#xff0c;也不能确认该 银行卡持有人和身…

openCV+Python实战练习——银行卡号识别

目录 项目Introduce&#xff1a; 项目名称&#xff1a; 具体操作步骤以及代码&#xff1a; 实现结果展示&#xff1a; 代码整体展示&#xff1a; 项目Introduce&#xff1a; 项目名称&#xff1a; 通过导入模板数字&#xff0c;对银行卡面上的数字进行识别&#xff0c;提…

【opencv学习】银行卡的识别

今天做一个小项目&#xff0c;运用已经学到的知识&#xff0c;做一个银行卡的识别。 银行卡的图像如下 这个银行卡是的数字模板是 现在我的任务是识别中间的16个数字 大致思路是&#xff1a; 1&#xff1a;读取模板&#xff0c;获得每个数字的模板信息 2&#xff1a;读取银行…

OpenCV C++案例实战二十《银行卡号识别》

OpenCV C案例实战二十《银行卡号识别》 前言一、获取模板图像1.1 功能效果1.2 功能源码 二、银行卡号定位2.1 将银行卡号切割成四块2.1.1 功能效果2.1.2 功能源码 2.2 字符切割2.2.1 功能效果2.2.2 功能源码 三、字符识别3.1.读取文件3.2.字符匹配3.3.功能源码 四、效果显示4.1…

opencv实际案例(一)银行卡号的识别

一、目标&#xff1a; 识别银行卡上的卡号 二、思路&#xff1a; 一 、准备模板&#xff0c;能够与卡号数字样式进行模型匹配 二、处理模板图片&#xff1a;将其分割成为单个数字的图片&#xff0c;和所对应的数字相匹配存储可迭代的数据类型中。 读入模板图片&#xff0…

(openCV--python)检测银行卡号 (应用篇)(包含模板图)

适合人群&#xff1a; 有python基础&#xff0c;注重应用、不追求深层次知识的小伙伴。前言&#xff1a; 本文对很多说用到的很多函数都是粗浅地解释一下用法以及作用&#xff0c;并不会解释该函数的具体结构。若想进一步深入了解还请自行谷狗一下。 完整代码 # Author :Eri…

opencv项目实践二(银行卡卡号识别)

任务说明 将银行卡卡号打印输出 实现 一、思路 1、定位银行卡卡号数字区域 2、将银行卡每个卡号数字单独提取出来 3、处理模板图片&#xff0c;将每个模板数字单独提取出来 4、通过模板匹配来识别每个卡号 二、具体代码实现 1、处理模板 卡号数字模板 # 读取模板图片 img_…