Python爬取影评并进行情感分析和数据可视化
Python爬取影评并进行情感分析和数据可视化
文章目录
- Python爬取影评并进行情感分析和数据可视化
- 一、引言
- 二、使用requests+BeautifulSoup进行影评的爬取
- 1、分析界面元素
- 2、编写代码
- 三、情感分析
- 1、数据预处理
- 2、情感分析
- 3、数据可视化
一、引言
前几天出了《航海王:红发歌姬》等电影,我就立马看了,正好做一个爬取影评,想看看影评的好坏。这就离不开python爬虫和自然语言处理技术了。
这是一个小案例:包含python爬虫、数据预处理、自然语言处理、数据可视化等内容。下面我将详细这个小案例。
二、使用requests+BeautifulSoup进行影评的爬取
1、分析界面元素
我这里使用简单的bs4进行爬取。
找到影评所在的标签位置
<div>
的类名为 comment
标签为 <span>
类名为 short
。
2、编写代码
代码如下,在User-Agent
中设置自己的请求头信息,并将某个电影url填入。
请求头信息获取:点击网络,再刷新一下页面,点击名称为comments?status=P,点击标头,在请求标头的最下方就能看到user-agent了。
获取影评评论内容的函数
def get_comment_content(comment):span = comment.find('span', class_='short')return span.get_text()
定义将评论内容保存到csv文件中
def save_to_csv(comments):with open('comments.csv', 'a', newline='', encoding='utf-8-sig') as csvfile:writer = csv.writer(csvfile)for comment in comments:content = get_comment_content(comment)writer.writerow([content])
主方法中调用上述函数并实现爬取与写入
url = '影评url地址'
#你的请求头信息
headers = {'User-Agent': 'Mozilla/5.0xxxxxxxxxxxxxxxxxxxx'}
while url:print('正在爬取:', url)response = requests.get(url, headers=headers)soup = BeautifulSoup(response.text, 'html.parser')comments = soup.find_all('div', class_='comment-item')save_to_csv(comments)time.sleep(1)
实现页面自动跳转的功能,这里加入了try来观察爬取不到的情况,并在结束时将url置空防止进入死循环。
try:pagination = soup.find('div', class_='center').find('a', class_='next')print(pagination)if pagination:next_page = pagination['href']url = '影评url地址' + next_pageprint('跳转到下一页:', url)print('找到标签跳转')else:url = Noneprint('无跳转')except:url = Noneprint('没有找到,结束')
print('爬取完成!')
完整代码:
import requests
from bs4 import BeautifulSoup
import csv
import timedef get_comment_content(comment):span = comment.find('span', class_='short')return span.get_text()def save_to_csv(comments):with open('comments.csv', 'a', newline='', encoding='utf-8-sig') as csvfile:writer = csv.writer(csvfile)for comment in comments:content = get_comment_content(comment)writer.writerow([content])url = '影评url地址'
headers = {'User-Agent': 'Mozilla/5.0xxxxxxxxxxxxxxxxxxxx'}
while url:print('正在爬取:', url)response = requests.get(url, headers=headers)soup = BeautifulSoup(response.text, 'html.parser')comments = soup.find_all('div', class_='comment-item')save_to_csv(comments)time.sleep(1)try:#页面跳转的点击在div的id为paginator ,class为center中的a标签class为nextpagination = soup.find('div', class_='center').find('a', class_='next')print(pagination)if pagination:next_page = pagination['href']url = '影评url地址' + next_pageprint('跳转到下一页:', url)print('找到标签跳转')else:url = Noneprint('无跳转')except:url = Noneprint('没有找到,结束')
print('爬取完成!')
最后将爬取到的评论信息进行保存。
尬住了,敷衍的打斗和过度的特效溢出屏幕的光污染。 |
---|
这就是歌姬吧? |
作为民工漫里最长寿的一部是有道理的,对粉丝来说这是一场蓄谋已久的狂欢,红发香克斯出演剧场电影本就不可多得,两代航海家在梦境内外完成了一种代际的交替也足够让人动容,热血和激情澎湃,贝波打call真的可爱极了。对非粉来说也没有观看难度,剧情对每一个出场的角色都有照顾,乌塔是香克斯的女儿自始至终都不会变,这是一次温柔的家庭和解,也是对银幕内外泛滥的负面情绪的一场救赎,乌塔想要创造一个没有苦难的世界,毫不意外最终是梦境一场,但一次完整的、有起有兴的ADO演唱会也能让人心头一软。 |
尾田这两年没少看女团吧 |
日本宅男文化還有救嗎 ファザコン蘿莉被ナルシスト裝帥大叔精神打擊變病嬌女idol 开场就说拯救世界的歌聲這個standard高的 結果一開嗓就想逃出影院 视觉听觉大脑受损本人 可以给你拔高一下说是讲娱乐至死 楚门的世界 然后 没了 这俩词就可以end of story 想煽情煽泪的地方皱眉+汗毛直竖save it plz!!! |
ado个人演唱会 |
买red电影票送uta演唱会门票 |
缤纷的色彩,华丽的音符,仿佛在电影院听了一场Live演唱会,让人梦回大和歌姬时代,可如此美妙的歌声真的是无罪的吗?当音乐的魔法消失,有罪的歌姬和无辜的小女孩不过是阴谋的一体两面。你是愿意沉迷在甜美的歌声中死去,还是宁愿辛苦努力踏实过每一天?魔法音乐的这个哲思,要怎么回答才能安全地活下去 |
这是开了一场个人演唱会啊,我觉得这个很适合小朋友看,大人的话闭上眼睛听听音乐还是可以的,剧情几乎是为零。 |
好漫长又随意的一部剧场版,槽点真的有比隔壁柯南少吗……加各种强行的设定也一定要促成全员乱打的局面就真的跟柯南一定要爆炸很像了。当成精良的周年纪念音乐会来看,给一个三星吧。 对池田秀一的声音都要有阴影了,又是这种被过度神话的装逼人物。另外,中文字幕强行翻译成航海王就很真的很能让人意识到,到底为什么这些不偷不杀不作恶的人要自称“海贼”。每次看乌塔和路飞就“为什么要当海贼”鸡同鸭讲地吵起来时,都很想打断他们,“其实他只是想当巡游世界的夺宝奇兵啦”。 |
由于一些原因,我们只能爬取220条评论。这里我尝试过在220条之前更换请求头继续爬取,结果还是到220就停了。通过打印第220条下面的网页,也发现网址和网站内元素没有改动。
同样的,将电影更换也是这种情况,但也验证了将url更换为其他电影,我们的代码依旧能正常爬取。
电影《保你平安》影评
看这个电影最大的疑问,如果韩露真的是坐台女,她死后就可以被挖坟墓吗? |
---|
关于韩露如果真的是坐台小姐应不应该被挖出来这件事,开篇魏平安和墓地经理吵架已经给了创作者的表态。魏平安质问祁经理:坐台小姐怎么了,埋咱这的人不让有道德瑕疵?别老模糊重点了吧?真不知道是看不懂还是看不见。 |
之前在muji打工,遇到一个爸爸,一口气买了47支笔,开了发票,问我能不能在发票后面给他写这些笔购买于哪里。他说,他女儿班上同学丢了一支笔,号称家里人从日本买的,国内买不到,刚好他女儿之前在muji买了支一样的,班上同学都说是她偷的,爸爸想给女儿挣个公道!抹黑一个人很简单,一张模糊的图、一条朋友圈、一句话就够了,但是要证明一个人,真的太难了!善良的人,祝你平安! |
立意很好,但只是浅浅摸到了边缘。一个女人要足够清白足够高尚才会被允许葬在男友旁边,本身这件事就很荒谬,通篇主角也只是为了帮她澄清谣言而奔走,从未想过女性是否可以挣脱这层枷锁。 |
腿上的胎记是女孩的软肋,乌有的传言是掘墓的铁铲。裤脚向下一寸遮不住审美的霸凌,棺椁移走一格破不掉信息的茧房。这时代多得是为流量胡说的嘴,因谣言蒙蔽的眼,却鲜有不凉的血和求真的心。冰可乐不凉热血,总抱怨直播间没人送出烟花。前方拦路的白马为不舍的爱牵线,江面盛放的烟花祝侠义的人平安。 |
三、情感分析
1、数据预处理
我们需要将我们所爬取的文件加一个简单的表头,方便我们接下来的操作
由于我们的文件只有一列数据,所以直接手动添加即可(使用记事本或者Excel)。
若需要批量添加表头,下面是代码.
with open('保你平安.csv', 'r',encoding='utf-8-sig') as f:reader = csv.reader(f)data = list(reader)# 修改第一列
data[0][0] = 'comment'
data[1][0] = 'xxxx'# 将其他数据向下移一个位置
for i in range(len(data)-1, 0, -1):data[i], data[i-1][1:] = [data[i-1][0]] + data[i][1:], data[i][1:]# 写回文件
with open('保你平安.csv', 'w', newline='') as f:writer = csv.writer(f)writer.writerows(data)
我们选择保你平安做情感分析,因为航海王的评论中有很多是日语的,不方便进行分析。
2、情感分析
添加表头之后,我们使用 jieba
对句子进行分词处理,并调用停用词来去除一些干扰词
import pandas as pd
import jieba
from textblob import TextBlob
import matplotlib.pyplot as plt# 设置文件名
input_file = "保你平安.csv"
stopwords_file = "stopwords.txt"
output_file = "保你平安processed.csv"# 读取停用词
with open(stopwords_file, 'r', encoding='utf-8') as f:stopwords = [line.strip() for line in f.readlines()]# 定义分词函数
def cut(text):words = jieba.cut(text)return " ".join([word for word in words if word not in stopwords])# 读取数据文件
data = pd.read_csv(input_file)# 分词并写入新列
data['process'] = data['comment'].apply(lambda x: cut(str(x)))
并将处理好的句子写入第二列,表头为process。
使用textblob进行简单的情感分析,将情感分为正向和负向(好评与差评),分析出的结果中华,好评用1表示,差评用-1表示,将分析结果写入第三列sentiment中。
# 情感分析并写入新列
data['sentiment'] = data['process'].apply(lambda x: TextBlob(str(x)).sentiment.polarity)# 写入新文件
data.to_csv(output_file, index=False)
3、数据可视化
最后我们将结果进行可视化,通过绘制饼图,来观察好评和差评所占的比例。
sentiment_counts = data['sentiment'].value_counts()
labels = ['Positive', 'Negative']
colors = ['#66c2a5', '#fc8d62']
explode = (.1, )
fig, ax = plt.subplots()
wedges, texts, autotexts = ax.pie(sentiment_counts, colors=colors, autopct='%1.1f%%', startangle=90, pctdistance=1.1,textprops=dict(color="b"))
ax.legend(wedges, labels, loc="center left", bbox_to_anchor=(1, 0, 0.5, 1))
ax.axis('equal')
plt.title("Sentiment Distribution")
plt.setp(autotexts, size=10, weight="bold")
plt.show()
如图发现这220条评论中,好评占比接近98%
完整代码:
import pandas as pd
import jieba
from textblob import TextBlob
import matplotlib.pyplot as plt# 设置文件名
input_file = "保你平安.csv"
stopwords_file = "stopwords.txt"
output_file = "保你平安processed.csv"# 读取停用词
with open(stopwords_file, 'r', encoding='utf-8') as f:stopwords = [line.strip() for line in f.readlines()]# 定义分词函数
def cut(text):words = jieba.cut(text)return " ".join([word for word in words if word not in stopwords])# 读取数据文件
data = pd.read_csv(input_file)# 分词并写入新列
data['process'] = data['comment'].apply(lambda x: cut(str(x)))# 情感分析并写入新列
data['sentiment'] = data['process'].apply(lambda x: TextBlob(str(x)).sentiment.polarity)# 写入新文件
data.to_csv(output_file, index=False)sentiment_counts = data['sentiment'].value_counts()
labels = ['Positive', 'Negative']
colors = ['#66c2a5', '#fc8d62']
explode = (.1, )
fig, ax = plt.subplots()
wedges, texts, autotexts = ax.pie(sentiment_counts, colors=colors, autopct='%1.1f%%', startangle=90, pctdistance=1.1,textprops=dict(color="b"))
ax.legend(wedges, labels, loc="center left", bbox_to_anchor=(1, 0, 0.5, 1))
ax.axis('equal')
plt.title("Sentiment Distribution")
plt.setp(autotexts, size=10, weight="bold")
plt.show()
相关文章:
Python爬取影评并进行情感分析和数据可视化
Python爬取影评并进行情感分析和数据可视化 文章目录 Python爬取影评并进行情感分析和数据可视化一、引言二、使用requestsBeautifulSoup进行影评的爬取1、分析界面元素2、编写代码 三、情感分析1、数据预处理2、情感分析3、数据可视化 一、引言 前几天出了《航海王࿱…...
ubuntu22.04.2安装onlyoffice(不更改默认端口版)
目录 一、配置阿里源 二、postgresql数据库 (一)安装postgresql (二)创建postgresql数据库和用户 三、安装 rabbitmq 四、安装nginx-extras 五、安装ONLYOFFICE Docs (一)Add GPG key (…...
企业如何有效制定企业信息化发展规划?(附信息化模板)
如何有效制定企业信息化发展规划?企业信息化发展规划是一个宏大而又复杂的命题,这篇来掰开揉碎讲一下企业应该如何有效制定信息化发展规划。 这里不给大家灌鸡汤,也不给大家画大饼,就说些实在的。 如果你想找经验方法࿰…...
计算机网络填空题
我会写下自己的答案和理解 希望自己可用在学习中体会到快乐,而不是麻木。 1. 网络协议三要素中语义是指 需要发出何种控制信息,完成何种动作以及做出何种响应 1.在计算机网络中要做到有条不紊的交换数据,就必须遵守一些事…...
【HashMap】为什么用自定义的类做HashMap的Key时需要重写hashcode方法和equals方法
【HashMap】为什么用自定义的类做HashMap的Key时需要重写hashcode方法和equals方法 【一】为什么有这个问题【二】Object类的中的hashcode方法和equals方法【三】重写hashcode【四】重写equals方法【五】hashmap中使用hashcode和equals方法 【一】为什么有这个问题 因为HashMa…...
Flutter自定义对话框返回相关问题汇总
Flutter自定义对话框返回相关问题汇总,详细解释 Flutter是一款流行的移动应用开发框架,它提供了很多内置的对话框,但是有时候我们需要自定义对话框来满足特定需求。在使用自定义对话框时,可能会遇到一些问题,下面是一…...
002docker 安装
官网安装https://docs.docker.com/engine/install/ 系统要求 Centos7 Linux 内核:官方建议 3.10 以上查看Linux内核版本 用于打印当前系统的相关信息(内核版本号,硬件架构,主机名称和操作系统类型等 cat /proc/version uname -a 更新YUM源 生产环境中此步操作…...
软件工程师,全面思考问题很重要
为什么要全面思考问题 □ 在软件开发中,对一个问题思考得越全面,编写出的代码就会越严谨,出现bug的几率就越低;反之,如果没有对一个问题进行全面而深入的思考,编写出的代码就会漏洞百出,出现各种莫名其妙、无法复现的bug的几率也就急剧增加。 □ 软件就是数据加逻辑,数…...
1.Apollo部署-linux
一.官方文档 https://www.apolloconfig.com/#/zh/deployment/quick-start-docker 二.环境准备 1.MySql 5.6.51.单独服务器192.168.2.13 https://downloads.mysql.com/archives/installer/ 2.JDK 1.8.X https://www.oracle.com/java/technologies/downloads/ 三.Apollo部署…...
【HTML】form标签
<form> 标签用于创建 HTML 表单,它是用于收集用户输入的重要元素。表单可以包含各种输入字段、按钮和其他交互元素,用于向服务器发送用户输入数据。 下面是一个简单的 <form> 标签的示例: <form action"/submit-form&q…...
基于SPAD / SiPM技术的激光雷达方案
激光雷达(LiDAR)是一种测距技术,近年来越来越多地用于汽车先进驾驶辅助系统(ADAS)、手势识别和3D映射等应用。尤其在汽车领域,随着传感器融合的趋势,LiDAR结合成像、超声波、毫米波雷达,互为补足,为汽车提供全方位感知…...
使用MATLAB工具模拟单/双频GPS和载波相位差分GPS
第一部分:介绍和背景 在我们的日常生活中,全球定位系统(GPS)发挥了重要的作用。无论是在我们的手机中,还是在各种应用中,GPS都是实现精确位置定位的关键技术。然而,有时候我们可能需要对GPS进行…...
当社恐成为技术面试官
前言 在被不知道多少个面试官拒绝之后,毕业四年之际,我这个社恐也成为了一位面试官。至于社恐为什么能成为面试官,我想放到文末讲,感觉不是重点。 之前被面试,最讨厌的话就是:请简单介绍一下自己 我的内心…...
Jetpack Compose:使用PagerIndicator和Infinity实现滚动的HorizontalPager
Jetpack Compose:使用PagerIndicator和Infinity实现滚动的HorizontalPager 可能你已经知道,Jetpack Compose 默认不包含内置的ViewPager组件。然而,我们可以通过在 build.gradle 文件中添加 accompanist 库依赖,将 ViewPager 功能…...
2023年杭州/广州/东莞/深圳软考(中/高级)认证,618报名特惠
软考是全国计算机技术与软件专业技术资格(水平)考试(简称软考)项目,是由国家人力资源和社会保障部、工业和信息化部共同组织的国家级考试,既属于国家职业资格考试,又是职称资格考试。 系统集成…...
springboot项目外卖管理 day03-公共字段填充与新增删除分类
文章目录 一、公共字段自动填充1.1、问题分析1.2、代码实现1.2.1、在实体类的属性上加入TableField注解,指定自动填充的策略1.2.2按照框架要求编写元数据对象处理器,在此类中统一为公共字段赋值,此类需要实现MetaObjectHandler接口1.2.3 功能…...
Nginx:Tomcat部署及优化(一)
Nginx:Rewrite 一、Tomcat介绍1.1 Tomcat 简介1.2 Tomcat 核心的组件1.2.1 什么是 servlet1.2.2 什么是 JSP 1.3 Tomcat 功能组件结构1.3.1 Container 结构分析 1.4 Tomcat 请求过程 二、Tomcat 服务部署三、Tomcat 虚拟主机配置四、Tomcat多实例部署 一、Tomcat介绍…...
Docker Swarm 集群搭建和使用 —— 筑梦之路
简单介绍 swarm 集群由管理节点(Manager)和工作节点(Worker)构成。 管理节点:主要负责整个集群的管理工作包括集群配置、服务管理等所有跟集群有关的工作。诸如监控集群状态、分发任务至工作节点等操作。 工作节点:主要负责执行运行服务的任务。 官方文档:docker swarm…...
是否需要更换CRM系统如何评估?如何确保更换成功?
很多企业在使用CRM客户管理系统的过程中,并没有达到预期的效果,甚至出现了实施失败的情况。部分企业可能会考虑更换CRM系统,以期获得更好的结果。但是,更换CRM系统是否值得呢?下面我们就来说说。 一、是否该更换CRM …...
CSDN竞赛57期题解
总结 交卷时一看才六十多分还有点吃惊,一看非编程题部分还是丢了二十分。填空题是这类竞赛最大的诟病,答案是名词的必然不唯一,答案需要计算的给定的参考答案必然计算错误,更离谱的是题目出成这样,反馈后官方竟然一点…...
springboot+vue.js大学生竞赛报名作品评分管理系统
本文介绍了大学生竞赛管理系统的开发全过程。通过分析大学生竞赛管理系统管理的不足,创建了一个计算机管理大学生竞赛管理系统的方案。文章介绍了大学生竞赛管理系统的系统分析部分,包括可行性分析等,系统设计部分主要介绍了系统功能设计和数…...
Python爱好者的自我修养(1):简单输入与输出
Python简单输入与输出 1.输出1.1 简单输出1.2 转义字符1.2.1 定义1.2.2 常见的转义字符用法 2.输入3.温馨提示 终于…… 终于…… 我开始玩Python了 (不是C不学了哈,C还是照更~) 今天先来简单讲下输入和输出 1.输出 1.1 简单输出 输出的函…...
java SSM 摄影作品网站myeclipse开发mysql数据库springMVC模式java编程计算机网页设计
一、源码特点 java SSM 摄影作品网站系统是一套完善的web设计系统(系统采用SSM框架进行设计开发,springspringMVCmybatis),对理解JSP java编程开发语言有帮助,系统具有完整的源代 码和数据库,系统主要采…...
[Maven高级]->近万字文章带你深入了解Maven
⭐作者介绍:大二本科网络工程专业在读,持续学习Java,努力输出优质文章 ⭐作者主页:逐梦苍穹 ⭐所属专栏:JavaEE ⭐如果觉得文章写的不错,欢迎点个关注一键三连😉有写的不好的地方也欢迎指正&…...
物联网Lora模块从入门到精通(五)光照与温湿度传感器
一、前言 在程序开发中,光照与温湿度的获取是十分常见与重要的,本文我们主要是使用M21温湿度光照三合一传感器,其中温湿度数据通过协议获取,而光照通过ADC获取。 二、代码实现 本文内容较为简单,且后续文章将在本文基…...
【网络编程】计算机网络基础知识总结 | 运输层 |TCP协议
文章目录 前言一、计算机网络层次结构二、网络层三、运输层3.1、TCP/IP协议介绍3.2、端口(协议端口号)3.3、套接字3.4、TCP实现原理3.4.1、TCP的特点3.4.2、停止等待协议3.4.3、滑动窗口协议3.4.4、拥塞控制3.4.5、TCP连接的三个阶段 3.5、UDP实现原理 前…...
python关键知识点
1. 变量:在程序中存储值或对象的名称。 2. 数据类型:指变量的数据类型,例如 str、int、float、list、tuple、dict、set 等。 3. 操作符:表示运算符号,例如加号 和减号 -。 4. 循环:通过重复执行某个代码…...
c# 从零到精通 数组的操作-将两个一维数组合并成一个二维数组
c# 从零到精通 数组的操作-将两个一维数组合并成一个二维数组 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Test07 { class Program { static void Main(string[] args) { //定义两个一维数组 int[] arr1 new int[] {…...
Linux目录结构(与window目录结构对比+绝对路径和相对路径)
一、Linux目录结构 Linux目录结构是一个标准化的文件系统层次结构,非常有组织性并且易于管理。而与Windows 操作系统不同,Linux将所有文件和设备都组织在一个单一的根目录下。以下是Linux的标准目录结构: /:根目录,包含…...
投票活动小程序开发搭建
由于小程序是基于微信开发者工具编写的,因此我先介绍一下需要使用的工具和技术: - 微信开发者工具:用于开发、调试和发布小程序。 - 小程序云开发:用于存储数据和进行后端逻辑处理。 - uni-app框架:uni-app 是一个使…...
做高端网站的公司/线下推广有哪些渠道
由于各种各样的原因,表格中出现了一些多余的空白行/空白列/空白单元格,怎样快速删除这些空白呢? 使用正则的来进行批量替换:^\n以换行符开头的信息替换成空。间接实现空行的删除。 替换成功后的效果:...
做网页和做网站的区别/怎么免费建个人网站
Python第二十一课(反射/元类) >>>思维导图>>>中二青年 反射reflect 什么是反射, 其实是反省,自省的意思 反射指的是一个对象应该具备,可以检测,修改,增加自身属性的能力 反射就是通过字符串操作属性 涉及的四个函数,这四个函数就是普通的内置函数 没有双下…...
杭州学网站建设/seo怎么做?
整体目标 在这一篇中,我们将使用Jenkins在此基础上构建一条完整的持续交付流水线,并且让团队不同成员能够基于该流水线展开基本的协作。开发: 持续提交代码并能够通过持续集成(CI)过程快速获取反馈,在通过C…...
方维网站建设/营销策划的概念
分享讲师:王文广—达观数据副总裁,浙江大学计算机系硕士,在系统架构设计及研发方面有十余年工作经验。讲师简介:曾在百度负责MP3搜索的架构设计和开发,及百度第一版的语音搜索系统和百度音频指纹系统;曾负责…...
wap网站做微信小程序/今日头条10大新闻
Redux是JavaScript状态容器,提供可预测化的状态管理。在实际开发中,常搭配React React-redux使用。这代表了目前前端开发的一个基本理念,数据和视图的分离。redux应运而生,当然还有其他的一些状态管理库,如Flux、Elm等…...
暴雪网易2023后不代理了/seo外包费用
查看自己的ip和采用什么方式上网(网通/电信)http://www.whatchina.com/html/sip.asp本文转自 xcf007 51CTO博客,原文链接:http://blog.51cto.com/xcf007/161180,如需转载请自行联系原作者...