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

python版本 3.6.2

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

引用库文件
# -*-coding:utf-8-*-
import requests
import re
from requests import RequestException
from bs4 import BeautifulSoup
import codecs
from os import path
import numpy as np
from PIL import Image
import jieba
from 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值