齐一都在唱什么呢+歌词词云分析

来源:互联网 发布:欧楷笔法 知乎 编辑:程序博客网 时间:2024/06/10 05:23

python版本 3.6.2

如果你是民谣控,应该听过齐叔的歌吧!那首经典的[这个年纪]但我的女人呢~但我的女人呢~ 当初听到这首歌的时候就深深的爱上,可谓真是有毒呀!
作为齐叔的歌迷,必须要分析一下齐叔呀!那么齐叔都在唱些什么呢?想办法获取所有齐叔的歌的歌词,发现酷我音乐刚好有齐叔所有音乐还包括歌词。
这下有了目标,接下来就是先拿数据啦!

引用库文件

# -*-coding:utf-8-*-import requestsimport refrom requests import RequestExceptionfrom bs4 import BeautifulSoupimport codecsfrom os import pathimport numpy as npfrom PIL import Imageimport jiebafrom wordcloud import WordCloud

获取整个网页内容

def get_page(url):    Headers = {    'Host':'www.kuwo.cn',    'User - Agent':'Mozilla / 5.0(WindowsNT10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 60.0.3112.101Safari / 537.36'    }    try:        response = requests.get(url,headers=Headers)        if response.status_code == 200:            return response.text        return None    except RequestException:        print('请求失败!')        return None

解析页面提取所有歌曲的链接

def parse_page(html):    soup = BeautifulSoup(html,'lxml')    list = soup.find('div',attrs={'class':'geci'})    lsoup = BeautifulSoup(str(list),'lxml')    count = -1    music_url = []    for x in lsoup.find_all('a'):        count = count+1        if count%2==0:            music_url.append(x)    #输出music_url    #正则表达式提取歌曲链接和歌名    regex = '<a href="(.*?)".*?>(.*?)</a>'    pattern = re.compile(regex, re.S)    items = re.findall(pattern, str(music_url))  # 先传入规则,在传需要在匹配源    url = []    for item in items:        url.append(item[0])        # print(item[0],item[1])    #返回歌曲链接结果    return url

获取每个链接对于的歌曲歌词

def get_lrc(url):    response = requests.get(url=url)  # http://www.kuwo.cn/geci/a_285345/    bs = BeautifulSoup(response.text, 'lxml')    # 使用select方法获得的节点可能不止一个,所以返回的类型是个list    # 异常处理 http://www.kuwo.cn/geci/l_14392025 《这个年纪 - 伴奏》歌词 — 齐一 没有歌词会报错,    try:        lyric = bs.select('div#lrc_yes')[0]        if lyric!=None:            for item in lyric.strings:                # print(item)                #获取每一句歌词并写入文件                write_file(item)    except Exception:        print('当前歌曲没有歌词,歌曲链接为',url)

写入文件

def write_file(content):    with open('齐一.txt','a') as f:        f.write(content)        f.flush()        f.close()

制作词云

def draw_wordcloud():    with codecs.open('齐一.txt',encoding='utf-8') as f:        comment_text = f.read()    cut_text = " ".join(jieba.cut(comment_text)) # 将jieba分词得到的关键词用空格连接成为字符串    d = path.dirname(__file__) # 当前文件文件夹所在目录    color_mask = np.array(Image.open(path.join(d, "齐一.png"))) # 读取背景图片    cloud = WordCloud(font_path=path.join(d,'simsun.ttc'), # 字体文件 这个字体window自带有 可以自行更换                      background_color='white',    # 设置背景颜色                      mask=color_mask,             # 设置背景图片                      max_words=2000,              # 设置最大显示的字数                      random_state=50,             # 设置有多少种随机生成状态,即有多少种配色方案                      max_font_size=100)           # 设置字体最大值    word_cloud = cloud.generate(cut_text) # 产生词云    word_cloud.to_file("pjl_cloud.jpg")  #生成的文件

执行方法操作

if __name__ == '__main__':    #歌单列表网址    url = 'http://www.kuwo.cn/geci/a_285345/'    #获取所有歌曲网址内容    html = get_page(url)    #解析网页,提取所有歌曲链接    music_url = parse_page(html)    #循环爬取    for url in music_url:        print('正在爬取',url)        #获取歌词        lrc = get_lrc(url)    #生成词云    draw_wordcloud()

效果图
这里写图片描述

歌词文件及背景图片下载链接:http://pan.baidu.com/s/1mhRSI96 密码:o7ky

原创粉丝点击