词云制作与词性统计——采用爬取的歌曲评论数据
文章目录
- 前言
- 一、评论数据清洗整理
- 二、词云与词性统计
- 1.词云制作
- 2. 词性统计
- 3. 词云与词性部分的全部代码
- 三、selenium评论获取部分
- 总结
前言
python课实验,
将爬取到QQ音乐歌曲评论进行处理;
提取评论中的关键词制作词云;
分析评论中词语的词性,做出词性统计
提示:以下是本篇文章正文内容
一、评论数据清洗整理
刚刚从QQ音乐上爬取的评论数据很乱,这里先给大家看一下我刚刚爬下来存在csv里的数据的样子:
可以看到横纵都有无关内容,且数据不规整,还有我们不需要的回复(只要评论就可以)。
所以我们先对数据进行整理:
import csv
import pprint'''
clean_comments.py
'''def read_csv(index):csv_path = './comments_info.csv'with open(csv_path, 'r', encoding='utf-8') as f:data = csv.reader(f)comments = [all_comments[index] for all_comments in data]# pprint.pprint(comments)# 删除回车与回复new_comments = []for i in range(len(comments)):comments[i] = comments[i].replace('\n', '')if '回复' in comments[i]:continuenew_comments.append(comments[i])# pprint.pprint(new_comments)return new_comments # 返回评论的一维列表
- 先用utf8读取csv数据
- 只取第二列的数据,index这里是要取的列
- 简单处理数据,把所有的回车和回复内容删掉
- 最终生成较为规整的评论数据,返回评论列表
(ps:这里把“评论”也存进去了,可以手动删掉的。不过在这么多评论面前,这两个字几乎不影响)
二、词云与词性统计
1.词云制作
函数代码如下:
def get_Word_Cloud():pre_comments = clean_comments.read_csv(1)# 删去无效词jieba.analyse.set_stop_words(stop_words_file_path)# 把评论列表组合成一个字符串,用于删去无效词+关键词提取sentences = " ".join(i for i in pre_comments)# 关键词提取word_count_list = jieba.analyse.extract_tags(sentences, topK=50, withFlag=True)# 生成词云key_words = " ".join(i for i in word_count_list)word_cloud = WordCloud(width=2000, height=1000, font_path="./font/msyhl.ttc", max_font_size=225,background_color="white", font_step=2)word_cloud.generate(key_words)word_cloud.to_file("wordcloud.png")plt.rcParams["font.sans-serif"] = ["SimHei"] # 设置中文plt.imshow(word_cloud)plt.title("评论关键词词云")plt.axis('off')plt.show()
- 首先读取评论列表
- 使用jieba删去无效词,stop_words_file_path是我自己在网上找的常见停用词txt文件,这个百度一下有很多打包好的。目的是用来把一些没用的、影响结果的文字和标点符号删掉
- 接下来把评论列表组成一个空格隔开的字符串,因为关键词提取只能输入一个字符串
- 下面就是关键词提取,提取出来的是一个关键词列表。我这里选择了权重在前50的
- 生成词云也是要求输入一个字符串,空格隔开,所以组成了key_words
- 至于具体画图用的是WordCloud模块:字符串放在generate方法里,词云的一些参数再WordCloud里,这里额外要提的一点是中文的设置,也就是font_path,需要赋值为本地的字体位置,我把它放在代码文件夹下的font文件夹里了,复制的是本机字体——微软雅黑。
- to_file是写入代码文件夹
- 下面就是用matplotlib画图,就不多说了。
给大家看下做出的词云图:
2. 词性统计
代码如下:
def speech_count():pre_comments = clean_comments.read_csv(1)# 删除无效词# 获取无效词列表stop_words_list = [i.strip() for i in open(stop_words_file_path, 'r', encoding='utf-8').readlines()]# print(stop_words_list)comments_slice = []for words in pre_comments:words = jieba.lcut(words) # 对每句话进行分词生成列表for word in words:if word not in stop_words_list:comments_slice.append(word)# 删除重复词语comments_slice = list(set(comments_slice))# 把评论列表组合成一个字符串,用于词性提取sentences = " ".join(i for i in comments_slice)words_generator = pseg.cut(sentence=sentences)word_list = []flag_list = []for word, flag in words_generator:if (word != ' ') and (flag != 'x'):word_list.append(word)flag_list.append(flag)print(word_list)print(flag_list)# 统计所有词性的个数word_dict = Counter(flag_list)print(word_dict)# 画图key_list = list(word_dict.keys())value_list = list(word_dict.values())plt.figure(figsize=(20, 10), dpi=100) # 设置大小plt.barh(key_list, value_list) # 画图plt.rcParams["font.sans-serif"] = ["SimHei"] # 设置中文plt.xlabel("数量")plt.ylabel("词性英文简称")plt.title("评论词频统计")plt.xticks([i for i in range(0, 301, 25)])plt.savefig("CiXing.png") # 保存文件plt.show() # 画图
- 读取评论列表后,也是要删去无效词。但是因为这次用的是jieba的posseg模块,没有自带的删除停用词操作,所以索性就手动删除一下。
- 先读取停用词文件,组成停用词列表;再遍历每个评论、再进行分词并遍历每个词,把无效词全删掉,保存到comments_slice并去重。
- 得到分词且去重后的列表后,组成字符串、使用jieba中posseg的cut方法进行词性分析,得到的是一个generator
- 循环读取其中的词和词性,用列表存起来,我们需要的是词性,删除里面不正常的内容,特指空格
- 采用Counter模块对词性进行统计,返回一个词性为key、数量为value的字典。
- 最后用这个字典的数据,采用matplotlib画图,结束战斗。
给大家看下做出的统计图:
3. 词云与词性部分的全部代码
import clean_comments
import pprint
import jieba.analyse
import jieba.posseg as pseg
from wordcloud import WordCloud
from collections import Counter
import matplotlib.pyplot as plt'''
Data_Process.py
'''
stop_words_file_path = r'./stopwords.txt'def get_Word_Cloud():pre_comments = clean_comments.read_csv(1)# 删去无效词jieba.analyse.set_stop_words(stop_words_file_path)# 把评论列表组合成一个字符串,用于删去无效词+关键词提取sentences = " ".join(i for i in pre_comments)# 关键词提取word_count_list = jieba.analyse.extract_tags(sentences, topK=50, withFlag=True)# 生成词云key_words = " ".join(i for i in word_count_list)word_cloud = WordCloud(width=2000, height=1000, font_path="./font/msyhl.ttc", max_font_size=225,background_color="white", font_step=2)word_cloud.generate(key_words)word_cloud.to_file("wordcloud.png")plt.rcParams["font.sans-serif"] = ["SimHei"] # 设置中文plt.imshow(word_cloud)plt.title("评论关键词词云")plt.axis('off')plt.show()def speech_count():pre_comments = clean_comments.read_csv(1)# 删除无效词# 获取无效词列表stop_words_list = [i.strip() for i in open(stop_words_file_path, 'r', encoding='utf-8').readlines()]# print(stop_words_list)comments_slice = []for words in pre_comments:words = jieba.lcut(words) # 对每句话进行分词生成列表for word in words:if word not in stop_words_list:comments_slice.append(word)# 删除重复词语comments_slice = list(set(comments_slice))# 把评论列表组合成一个字符串,用于词性提取sentences = " ".join(i for i in comments_slice)words_generator = pseg.cut(sentence=sentences)word_list = []flag_list = []for word, flag in words_generator:if (word != ' ') and (flag != 'x'):word_list.append(word)flag_list.append(flag)print(word_list)print(flag_list)# 统计所有词性的个数word_dict = Counter(flag_list)print(word_dict)# 画图key_list = list(word_dict.keys())value_list = list(word_dict.values())plt.figure(figsize=(20, 10), dpi=100) # 设置大小plt.barh(key_list, value_list) # 画图plt.rcParams["font.sans-serif"] = ["SimHei"] # 设置中文plt.xlabel("数量")plt.ylabel("词性英文简称")plt.title("评论词频统计")plt.xticks([i for i in range(0, 301, 25)])plt.savefig("CiXing.png") # 保存文件plt.show() # 画图if __name__ == '__main__':get_Word_Cloud() # 获取词云speech_count() # 词性频率统计
三、selenium评论获取部分
想了想还是把爬评论部分也发出来把,这个部分内容是我借鉴来的,自己是理解了,这里就不多解释了。
from bs4 import BeautifulSoup
import csv
from selenium import webdriver
import time # 用于控制等待页面相应时间的
import pandas as pdheaders = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) ''Chrome/89.0.4389.90 Safari/537.36'}
sings_path = 'https://y.qq.com/n/yqq/song/000PLHrM2luXiz.html'# 获取最新评论
def get_commnets_praise(driver):page_source = driver.page_source # 获取页面的源码soup = BeautifulSoup(page_source, 'html.parser') # 读取items = soup.find('ul', class_='js_all_list')info_dict = {'评论': []}for item in items.find_all('li'):info_dict['评论'].append(item.find('p', class_='js_hot_text').text)return info_dict# 写入csv
def comments_tocsv(comments_praise_dict):comments_info = []for key in comments_praise_dict:values = []for item in comments_praise_dict[key]:values.append(item)print(item)comments_info.extend(values) # 二维列表comments = pd.DataFrame(columns=['评论'], data=comments_info)comments.to_csv(r'comments_info.csv', encoding='utf_8_sig')# 总函数
def get_music_info(url, num_comment_page, time_sleep):comments_praise_dict = {'评论': []}driver = webdriver.Chrome()driver.get(url)time.sleep(time_sleep)for j in range(num_comment_page): # 每次读取一篇的c_p_d = get_commnets_praise(driver) # 获取评论for key in comments_praise_dict:comments_praise_dict[key].extend(c_p_d[key]) # 腾数据print(c_p_d[key])botton = driver.find_element_by_class_name('next')botton.click()time.sleep(time_sleep)driver.close()comments_tocsv(comments_praise_dict) # 写入if __name__ == '__main__':get_music_info(sings_path, num_comment_page=10, time_sleep=10) # 获取评论,comments_info.csv
- 如果你和我一样,也是爬的QQ音乐,那只需要把header和sings_path改了就行。
- num_comment_page是爬取的页数,想改也行;time_sleep是休眠时间,用于等页面响应的,想改也行。
总结
算是一个集爬数据、洗数据、处理数据一体的小项目把,挺好玩的。
这里贴一下这几个py文件在文件夹的格式:
哦哦,最后补充一下,我用的停用词来自这里:
https://blog.csdn.net/shijiebei2009/article/details/39696571
把停用词复制下来存到txt文件就行。
词云制作与词性统计——采用爬取的歌曲评论数据相关推荐
- python爬淘宝app数据_一篇文章教会你用Python爬取淘宝评论数据(写在记事本)
[一.项目简介] 本文主要目标是采集淘宝的评价,找出客户所需要的功能.统计客户评价上面夸哪个功能多,比如防水,容量大,好看等等. [二.项目准备工作] 准备Pycharm,下载安装等,可以参考这篇文章 ...
- python3爬虫进阶之自动登录网易云音乐并爬取指定歌曲评论
** python3爬虫进阶之自动登录网易云音乐并爬取指定歌曲评论 ** 一.访问网易云首页,找到所需元素的位置 用浏览器打开网易云首页https://music.163.com/之后,发现我们要找的 ...
- python爬取抖音用户评论_python实现模拟器爬取抖音评论数据的示例代码
目标: 由于之前和朋友聊到抖音评论的爬虫,demo做出来之后一直没整理,最近时间充裕后,在这里做个笔记. 提示:大体思路 通过fiddle + app模拟器进行抖音抓包,使用python进行数据整理 ...
- java爬虫黑马百度云,Java爬虫小Demo java爬取百度风云榜数据
Java爬虫小Demo java爬取百度风云榜数据 很简单的一个小例子,使用到了java的爬虫框架 jsoup ,一起啦看看实现的方法吧! 相关推荐:Python爬虫实战 python爬虫爬取百度风云 ...
- (2020)使用Airtest来爬取某宝评论数据
本帖子背景:本帖子,是一个学习的过程.一个爬取某宝评论的小单子,促使我前来学习简单的.不用掉头发的.不用爆肝的(再说,我也没那能力去硬干它啊)教程 昨天晚上,大学四年的舍友微信问我"说还搞爬 ...
- 如何写一个python程序浏览淘宝_一篇文章教会你用Python爬取淘宝评论数据(写在记事本)...
[一.项目简介] 本文主要目标是采集淘宝的评价,找出客户所需要的功能.统计客户评价上面夸哪个功能多,比如防水,容量大,好看等等. [二.项目准备工作] 1. 准备Pycharm,下载安装等,可以参考这 ...
- Python爬取京东商品评论数据
一.前言 本文将承接笔者的上篇文章Python爬取京东商品数据,使用京东商品唯一id字段"sku"拼接url,得到真实的京东商品评论网址,进而解释数据并保存到文件中,所爬取到的数据 ...
- python 爬虫动态网页的区别_Python开发爬虫之动态网页抓取篇:爬取博客评论数据——通过Selenium模拟浏览器抓取...
区别于上篇动态网页抓取,这里介绍另一种方法,即使用浏览器渲染引擎.直接用浏览器在显示网页时解析 HTML.应用 CSS 样式并执行 JavaScript 的语句. 这个方法在爬虫过程中会打开一个浏览器 ...
- python动态页面元素爬取_Python开发爬虫之动态网页抓取篇:爬取博客评论数据——通过浏览器审查元素解析真实网页地址...
由于主流网站都使用JavaScript展示网页内容,和前面简单抓取静态网页不同的是,在使用JavaScript时,很多内容并不会出现在HTML源代码中,而是在HTML源码位置放上一段JavaScrip ...
最新文章
- 一个TreeView 样式表
- idea创建一个html5,idea创建一个SpringBoot项目
- APP漏洞自动化扫描专业评测报告
- 与MYSQL的零距离接触(数据类型) 慕课网
- 关于电脑(window)后门查看的一些总结
- 四阶龙格库塔c语言,四阶龙格库塔算法的C语言实现
- 树莓派使用STEP3:更换镜像源
- 机器学习——对三种模式的看法
- sql server 内存_SQL Server内存性能指标–第3部分– SQL Server Buffer Manager指标和内存计数器
- 程序员拒带电脑回家被开除获赔 19.4 万;库克称,很多功能来自中国消费者反馈;谷歌开源1.6万亿参数语言模型 | 极客头条...
- 中级 PHP 知识点汇总
- python源码多平台编译_Python工程编译成跨平台可执行文件(.pyc)
- 十字链表存储稀疏矩阵
- codesmith 连接mysql_CodeSmith连接Mysql方法步骤
- 21个最具代表性的英国著名地标建筑
- 搭建Cacti监控(2)
- 关于administrator没有管理员权限问题
- 新闻闲话:低龄儿童,如何快快乐乐学英语
- h5调用指纹识别_HTML5 + JS 网站追踪技术:帆布指纹识别 Canvas FingerPrinting Universally Unique Identifier,简称UUID...
- word图文混排复制到FCKEditor图片不显示