这是刚刚学python的一个小练手,最近整理整理总结下写成文章,算是个学习的见证吧

通过python爬取了网易云音乐上汪峰最热门的50首歌词,并对它们进行文本分析:

第一种方法是用TF-IDF算法进行关键字提取,第二种方法是词频统计

1、数据获取:request+json+BeautifulSoup

import requests

import json

import re

from bs4 import BeautifulSoup

import time

user_agent = 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36'

headers = {'User-Agent': user_agent} # 定义头信息

def download_by_music_id(music_id): #根据歌词id下载

url = 'http://music.163.com/api/song/lyric?'+ 'id=' + str(music_id)+ '&lv=1&kv=1&tv=-1'

r = requests.get(url,headers=headers)

json_obj = r.text

j = json.loads(json_obj)

lrc = j['lrc']['lyric']

pat = re.compile(r'\[.*\]') #这里几行代码是把歌词中的空格和符号之类的去掉

lrc = re.sub(pat,"",lrc)

lrc = lrc.strip()

return lrc

def write_data(content):

file_date = time.strftime('%Y-%m-%d', time.localtime(time.time())) # 当前日期,用于文件命名

fn = open('%s.txt' % file_date, 'a+') # 新建文件对象,以追加模式打开

fn.write(content) # 写入文件

fn.close() # 关闭文件对象

def get_music_ids_by_musican_id(singer_id): #通过一个歌手id下载这个歌手的所有歌词

singer_url = 'http://music.163.com/artist?'+ 'id='+str(singer_id)+ '&lv=1&kv=1&tv=-1'

r = requests.get(singer_url,headers=headers).text

soupObj = BeautifulSoup(r,'lxml')

song_ids = soupObj.find('textarea').text

jobj = json.loads(song_ids)

for item in jobj:

write_data(download_by_music_id(item['id']))

print(jobj.size)

get_music_ids_by_musican_id(5347) #括号内为歌手id

2、用TF-IDF提取关键字分析,并打印出它们所占的比重。

import jieba.analyse # 导入关键字提取库

import pandas as pd # 导入pandas

# 读取文本数据

fn = open(r'data\wflyric.txt') # 以只读方式打开文件

string_data = fn.read() # 使用read方法读取整段文本

fn.close() # 关闭文件对象

# 关键字提取

tags_pairs = jieba.analyse.extract_tags(string_data, withWeight=True, allowPOS=['ns', 'n', 'vn', 'v','a'],

withFlag=True) # 提取关键字标签

tags_list = [] # 空列表用来存储拆分后的三个值

for i in tags_pairs: # 打印标签、分组和TF-IDF权重

tags_list.append((i[0].word, i[0].flag, i[1])) # 拆分三个字段值

tags_pd = pd.DataFrame(tags_list, columns=['word', 'flag', 'weight']) # 创建数据框

print (tags_pd) # 打印数据框

这里只摘取了top10的关键字

3、词频统计,事先准备好停词文本,接着开始读取文本数据,用正则表达式去掉不规范的数据,然后文本分词,接着与停词文本匹配,筛选出有效的文本,最后做词云效果展示

import re # 正则表达式库

import collections # 词频统计库

import numpy as np # numpy库

import jieba # 结巴分词

import wordcloud # 词云展示库

from PIL import Image # 图像处理库

import matplotlib.pyplot as plt # 图像展示库

# 读取文本文件

fn = open(r'data\wflyric.txt') # 以只读方式打开文件

string_data = fn.read() # 使用read方法读取整段文本

fn.close() # 关闭文件对象

fn2=open(r'data\stopCn.txt',encoding='utf-8') #停词文本

remove_words=fn2.read()

fn2.close()

# 文本预处理

pattern = re.compile(u'\t|\n|\.|-|一|:|;|\)|\(|\?|"|、|\s+') # 建立正则表达式匹配模式

string_data = re.sub(pattern, '', string_data) # 将符合模式的字符串替换掉

# 文本分词

seg_list_exact = jieba.cut(string_data, cut_all=False) # 精确模式分词[默认模式]

object_list = [] # 建立空列表用于存储分词结果

for word in seg_list_exact: # 迭代读出每个分词对象

if word not in remove_words: # 如果不在去除词库中

object_list.append(word) # 分词追加到列表

# 词频统计

word_counts = collections.Counter(object_list) # 对分词做词频统计

word_counts_top10= word_counts.most_common(10) # 获取前10个频率最高的词

for w, c in word_counts_top10: # 分别读出每条词和出现从次数

print(w, c) # 打印输出

# 词频展示

mask = np.array(Image.open(r'data\wf.jpg')) # 定义词频背景

wc = wordcloud.WordCloud(

font_path='C:/Windows/Fonts/simhei.ttf', # 设置字体格式,不设置将无法显示中文

mask=mask, # 设置背景图

max_words=50, # 设置最大显示的词数

max_font_size=100 # 设置字体最大值

)

wc.generate_from_frequencies(word_counts) # 从字典生成词云

image_colors = wordcloud.ImageColorGenerator(mask) # 从背景图建立颜色方案

wc.recolor(color_func=image_colors) # 将词云颜色设置为背景图方案

plt.imshow(wc) # 显示词云

plt.axis('off') # 关闭坐标轴

plt.show() # 显示图像

词云效果图展示:

后续会对词语进行进一步的情感分析

python的语言是什么歌_用python对歌词进行语言分析相关推荐

  1. 88是python语言的整数类型_少儿Python编程_第三讲:常量变量和数据类型

    无论使用哪一种编程语言,甚至是学习数学.物理,都需要掌握常量.变量.表达式的概念和用法.本讲将带领读者进入编程世界,学习程序的基本元素. 3.1 基本数据类型 基本数据类型有数值型.布尔型和字符型.它 ...

  2. python是一种动态语言、这意味着_【python编程的优点是什么?难怪选择python的人越来越多了】- 环球网校...

    [摘要]Python是一种动态解释的.强类型定义语言:编写它时不需要定义变量类型.python判断值的类型的方法是什么,那么python编程的优点是什么?难怪选择python的人越来越多了,所以你知道 ...

  3. python语言设计学习方向_学好Python开发就业方向有哪些?

    原标题:学好Python开发就业方向有哪些? 近年来,Python市场火爆,从业人员薪资不断增加,选择学Python的人也在逐年增多.然而,很多人学Python只是盲目的跟随潮流,对于Python却不 ...

  4. python语言程序的特点_《Python语言程序设计》 —1.1.3 Python的特点及应用领域...

    1.1.3 Python的特点及应用领域 学习一门编程语言,应该了解其特点及适用领域.Python语言的特点及应用领域如下. 1. 特点 (1)优点 简单易学:在开发者社群流行着一句玩笑-" ...

  5. 简述python语言的主要领域_简述Python语言经验总结

    Python语言是不被大多数人知道的东西,这里就简单概述下Python语言,顺便闲谈一 下Python 标准库."俗话"说:库即是语言,语言即是库.由此可见拥有一套高质量.具备良好 ...

  6. python语言是编译执行_加速Python运行的工具

    加速Python运行的工具应用 如果你需要让你的Python程序加速运行,在不同的层次有一些不同的解决方案: 重写 你的 Python 代码, 通过 并行化parallelizing 和 优化opti ...

  7. python语言程序设计实验题_《Python语言程序设计》测验题目

    Python语言程序设计测验题目 在MOOC网学习Python语言程序设计 课程,课程会有考试,这里把每次考试的经历记录下来,作为学习Python笔记的一部分,后边的考试会持续更新-- Python语 ...

  8. python语言程序设计编程题_《python语言程序设计》_第一章编程题

    题目1.1 :显示"welcome to python " 答案:print('welcome to python') 题目1.2:显示"welcome to pytho ...

  9. python设计贪吃蛇游戏论文_用Python写一个贪吃蛇AI,让程序自己玩游戏

    前言 这两天在网上看到一张让人涨姿势的图片,图片中展示的是贪吃蛇游戏, 估计大部分人都玩过.但如果仅仅是贪吃蛇游戏,那么它就没有什么让人涨姿势的地方了. 问题的关键在于,图片中的贪吃蛇真的很贪吃XD, ...

最新文章

  1. [文摘20090224]天干和地支
  2. 使用using与typedef来定义别名
  3. Leetcode 583.两个字符串的删除操作
  4. dubbo源码解析(四十一)集群——Mock
  5. php 取数组数量_PHP array_slice():截取数组的一部分
  6. 深度学习笔记(41) 候选区域
  7. 零基础学python尹会生_编程零基础应当如何开始学习 Python?
  8. struts2的动态方法调用(DMI)和通配符映射
  9. Diablo III 卡Checking for updates的问题解决
  10. css html5布局方式_创建新HTML5&CSS3单页布局– Rock门户
  11. Python3爬虫 爬句子迷
  12. 从linaro下载安装二进制文件安装交叉编译工具
  13. 服务器证书如果不被网站信任怎么办?
  14. win10睡眠只是关掉显示器的问题
  15. 排列组合之生成排列_(:з」∠)_
  16. 百度AI战疫五十天:三场战役与一次胜利
  17. 2022年全国职业院校技能大赛(高职组)
  18. 安卓APP源码和设计报告——仿淘宝水果商城
  19. 商场百货会员引流 购物中心会员拉新方式
  20. git 交互式rebase

热门文章

  1. C#语法:委托与事件
  2. 串口、COM口、TTL和RS-232的区别详解
  3. 小明分享|嵌入式LINUX开发日志-错误汇总①
  4. Arduino--库函数头文件
  5. 在计算机网络俗称网上邻居上能看到自己,能看到自己计算机,看不到网上邻居的标准答案...
  6. python生成xml文件工具_Python根据指定文件生成XML的方法
  7. 一位小小码蚁工作2年多感想
  8. OA项目15:权限管理实体设计及映射
  9. 影响一生的职业建议 [转] - 看懂了不一定在高位,在高位的必须看懂了、信息量很大,多学学!...
  10. 微软EPG老大发给员工的mail