大家好,我是J哥。
最近《八佰》这部电影比较火,上映仅15天就已斩获22亿票房。对于沉寂了半年、影院上座率仍限定在50%的电影市场而言,这样的成绩出人意料。
从猫眼电影官网可以看到,《八佰》吸引了100万人的评论,获得了9.2分的高口碑。一向好奇的J哥产生了一些疑惑,这些人到底在评论些啥?哪些地方的人评论最多?针对不同演员角色的评论内容有什么不同?
于是,J哥用Python采集了《八佰》18万条观众影评并做可视化分析,数据采集区间为2020年8月21日9点至2020年8月30日24点。公众号后台回复八佰可获取本文完整数据集和代码。
数据获取
猫眼电影是简单的动态网页,数据格式为json,通过解析接口的方式即可轻松获取。如果您对动态网页爬虫感兴趣,可查看J哥往期原创文章《实战|Python轻松实现动态网页爬虫(附详细源码)》。本文不做赘述,仅提供核心代码:
def parse_page(html):
try:
data = json.loads(html)['cmts'] # 将str转换为json
#print(data)
comments = []
for item in data:
comment = {
'id': item['id'],
'nickName': item['nickName'],
'cityName': item['cityName'] if 'cityName' in item else '', # 处理cityName不存在的情况
'content': item['content'].replace('\n', ' ', 10), # 处理评论内容换行的情况
'score': item['score'],
'startTime': item['startTime']
}
comments.append(comment)
return comments
except Exception as e:
pass
数据清洗
读取影评数据
import pandas as pd
import numpy as np
data=[]
with open('comments.txt', 'r',encoding='utf-8-sig') as f_input:
for line in f_input:
data.append(list(line.strip().split(',')))
data
转为DataFrame并添加列名
df = pd.DataFrame(data).iloc[:, 0:6]
df.columns = ['观众ID','观众昵称','城市','评论内容','评分','评论时间']
删除重复记录和缺失值
df = df.drop_duplicates()
df = df.dropna()
预览并保存
df.sample(5)
df.to_csv("八佰.csv",index=False,encoding="utf_8_sig")
数据可视化
导入相关库
import jieba
import re
import matplotlib.pyplot as plt
from pyecharts.charts import *
from pyecharts import options as opts
from pyecharts.globals import ThemeType
import stylecloud
from I