Python数据获取及分析 获取电影评论星级时间
豆瓣
本任务使用 Python 来获取豆瓣网中某电影下所有的评论,进行分析,从观
众的角度来了解这部电视剧。
数据获取
使用如下脚本获取时间,星级,评论
正则表达式可在此处测试正则表达式可视化工具和正则表达式调试工具
import requests
import re
from openpyxl import Workbook
def getdata():
header = {
# F12查看
"User-Agent": "",
"cookie": ""
}
original_url = 'https://movie.douban.com/subject/30228394/comments?start='
original_url2 = '&limit=20&status=P&sort=new_score'
for page in range(24):
url = original_url + str(page * 20) + original_url2
print("正在进行第{}页评论获取网址{}".format(page,url))
r = requests.get(url, headers=header)
data = r.text
# 评论
comments = re.findall("<span class=\"short\">([\w\W]*?)</span>", data)
# 时间
times = re.findall("<span class=\"comment-time \" title=\".*?\">([\w\W]*?)</span>", data)
# 星级
stars = re.findall("<span class=\"allstar[\d]* rating\" title=\"(.*?)\"></span>", data)
for i in range(19):
comment = comments[i].replace("\n", "")
time = times[i].replace("\n", "")
time = time.replace(" ", "")
star = stars[i]
# 生成第i行数据
ws.append([time, star, comment])
commentst = ""
commentst += comment
if __name__ == '__main__':
# 实例化
wb = Workbook()
# 激活 worksheet
ws = wb.active
# 设置表头
ws.append(['时间','星级','评论'])
col = ws.column_dimensions['A'] # 将时间列拓宽
col.width = 20
col = ws.column_dimensions['C'] # 将评论列拓宽
col.width = 140
getdata()
wb.save('用户评价信息.csv')
获取的时间,星级,评论数据
pandas分家,划分为时间表和星级表
import pandas as pd #引入pandas函数并as为pd以便后续调用
df = pd.read_csv('用户评价信息.csv',encoding='utf-8') #读取数据,将数据储存进data中
df.columns = ['时间','星级','评论']
res = df.groupby('时间').count()
res.to_csv('时间表.csv')
print(res)
res = df.groupby('星级').count()
res.to_csv('星级表.csv')
print(res)
乱码问题是由于Excel打开格式问题,在程序中由UTF-8一统江山,不存在乱码问题
时间表
星级表
星级,时间,评论
力荐,319,319
很差,30,30
推荐,40,40
较差,30,30
还行,37,37
可视化分析
要求将爬取的数据存放在文件中,且实现对数据的可视化分析,包括:
1、 评论日期
按照日期统计评论次数;
源代码:
import numpy as np # 引入numpy函数并as为np以便后续调用
import pandas as pd # 引入pandas函数并as为pd以便后续调用
import matplotlib.pyplot as plt # 引入matplotlib.pyplot函数并as为plt以便后续调用
plt.rcParams['font.sans-serif'] = ['KaiTi'] # 指定默认字体
df = pd.read_csv('时间表.csv', encoding='utf-8') # 读取数据,将数据储存进data中
df.columns = ['时间', '星级', '评论'<