文章目录

  • 前言
  • 一、评论数据清洗整理
  • 二、词云与词性统计
    • 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文件就行。

词云制作与词性统计——采用爬取的歌曲评论数据相关推荐

  1. python爬淘宝app数据_一篇文章教会你用Python爬取淘宝评论数据(写在记事本)

    [一.项目简介] 本文主要目标是采集淘宝的评价,找出客户所需要的功能.统计客户评价上面夸哪个功能多,比如防水,容量大,好看等等. [二.项目准备工作] 准备Pycharm,下载安装等,可以参考这篇文章 ...

  2. python3爬虫进阶之自动登录网易云音乐并爬取指定歌曲评论

    ** python3爬虫进阶之自动登录网易云音乐并爬取指定歌曲评论 ** 一.访问网易云首页,找到所需元素的位置 用浏览器打开网易云首页https://music.163.com/之后,发现我们要找的 ...

  3. python爬取抖音用户评论_python实现模拟器爬取抖音评论数据的示例代码

    目标: 由于之前和朋友聊到抖音评论的爬虫,demo做出来之后一直没整理,最近时间充裕后,在这里做个笔记. 提示:大体思路 通过fiddle + app模拟器进行抖音抓包,使用python进行数据整理 ...

  4. java爬虫黑马百度云,Java爬虫小Demo java爬取百度风云榜数据

    Java爬虫小Demo java爬取百度风云榜数据 很简单的一个小例子,使用到了java的爬虫框架 jsoup ,一起啦看看实现的方法吧! 相关推荐:Python爬虫实战 python爬虫爬取百度风云 ...

  5. (2020)使用Airtest来爬取某宝评论数据

    本帖子背景:本帖子,是一个学习的过程.一个爬取某宝评论的小单子,促使我前来学习简单的.不用掉头发的.不用爆肝的(再说,我也没那能力去硬干它啊)教程 昨天晚上,大学四年的舍友微信问我"说还搞爬 ...

  6. 如何写一个python程序浏览淘宝_一篇文章教会你用Python爬取淘宝评论数据(写在记事本)...

    [一.项目简介] 本文主要目标是采集淘宝的评价,找出客户所需要的功能.统计客户评价上面夸哪个功能多,比如防水,容量大,好看等等. [二.项目准备工作] 1. 准备Pycharm,下载安装等,可以参考这 ...

  7. Python爬取京东商品评论数据

    一.前言 本文将承接笔者的上篇文章Python爬取京东商品数据,使用京东商品唯一id字段"sku"拼接url,得到真实的京东商品评论网址,进而解释数据并保存到文件中,所爬取到的数据 ...

  8. python 爬虫动态网页的区别_Python开发爬虫之动态网页抓取篇:爬取博客评论数据——通过Selenium模拟浏览器抓取...

    区别于上篇动态网页抓取,这里介绍另一种方法,即使用浏览器渲染引擎.直接用浏览器在显示网页时解析 HTML.应用 CSS 样式并执行 JavaScript 的语句. 这个方法在爬虫过程中会打开一个浏览器 ...

  9. python动态页面元素爬取_Python开发爬虫之动态网页抓取篇:爬取博客评论数据——通过浏览器审查元素解析真实网页地址...

    由于主流网站都使用JavaScript展示网页内容,和前面简单抓取静态网页不同的是,在使用JavaScript时,很多内容并不会出现在HTML源代码中,而是在HTML源码位置放上一段JavaScrip ...

最新文章

  1. 一个TreeView 样式表
  2. idea创建一个html5,idea创建一个SpringBoot项目
  3. APP漏洞自动化扫描专业评测报告
  4. 与MYSQL的零距离接触(数据类型) 慕课网
  5. 关于电脑(window)后门查看的一些总结
  6. 四阶龙格库塔c语言,四阶龙格库塔算法的C语言实现
  7. 树莓派使用STEP3:更换镜像源
  8. 机器学习——对三种模式的看法
  9. sql server 内存_SQL Server内存性能指标–第3部分– SQL Server Buffer Manager指标和内存计数器
  10. 程序员拒带电脑回家被开除获赔 19.4 万;库克称,很多功能来自中国消费者反馈;谷歌开源1.6万亿参数语言模型 | 极客头条...
  11. 中级 PHP 知识点汇总
  12. python源码多平台编译_Python工程编译成跨平台可执行文件(.pyc)
  13. 十字链表存储稀疏矩阵
  14. codesmith 连接mysql_CodeSmith连接Mysql方法步骤
  15. 21个最具代表性的英国著名地标建筑
  16. 搭建Cacti监控(2)
  17. 关于administrator没有管理员权限问题
  18. 新闻闲话:低龄儿童,如何快快乐乐学英语
  19. h5调用指纹识别_HTML5 + JS 网站追踪技术:帆布指纹识别 Canvas FingerPrinting Universally Unique Identifier,简称UUID...
  20. word图文混排复制到FCKEditor图片不显示

热门文章

  1. CSDN社区电子杂志项目(CSDN eMag)所有期刊总索引
  2. Java Agent 型内存马调试系列 (一)
  3. 软考之路--小桥流水人家
  4. 2. 网络协议及硬件
  5. 中国移动支付报告:领跑全球 前景广阔
  6. 个人网站音乐服务器,不在是想象:教你搭建个人音乐播放网站(3)
  7. shell脚本遍历目录下的所有文件并进行操作
  8. 加速大数据分析和机器学习- Ziya Ma ( Intel Corp )
  9. 【红米刷机】红米手机卡刷稳定版教程
  10. 电子听诊器智能化后对健康生活有多大的帮助?