文章目录
Gitee 仓库地址: https://gitee.com/ccuni/pymongo-douban-comment-analysis
一、运行环境
- Windows10
- python 3.9
- Anaconda3 + jupyter
- mongodb 5.0.6
- PyMongo 3.5.1
- wordcloud-1.8.1
anaconda 安装 wordcloud的命令
conda install -c conda-forge wordcloud
二、实战介绍
数据来源基于Python的第三方库,即requests库
,bs4库
,re库
爬取豆瓣网TOP10的电影信息,以及它们的部分影评信息(100个左右)。
将爬取的信息进行预处理,封装成dict字典,借助 pymongo库
连接本机的 MongoDB,向数据库插入之前爬取的真实数据,然后分别使用MongoDB提供的map_reduce机制以及agreegate机制来聚合、分组、汇总计算数据,以MongoDB为基础,存储影视信息和评论信息,同时分析电影的综合价值。
三、获取数据
这一部分可参考Gitee仓库:https://gitee.com/ccuni/pymongo-douban-comment-analysis
四、PyMongo 实战
4.1 连接MongoDB、创建集合
from pymongo import MongoClient
from random import randint
client = MongoClient('localhost', 27017)
db = client.mv
# 创建电影信息集合
ct_mv_info = db.dc_mv_info
# 创建影评集合
ct_mv_review = db.dc_mv_review
# 查看创建结果
ct_mv_review
4.2 向 MongoDB 插入文档
这里先将DataFrame的影视信息转化为dict字典格式
dc_mv = []
index = 0
for x in mv_data.values.tolist():
dict_info = {
}
# 指定文档的_id为电影ID
dict_info['_id'] = mv_data['mv_id'][index]
index += 1
# i 用于循环遍历取DF列表数据
i = 0
for key, v in mv_data.items():
dict_info[key] = x[i]
i += 1
# 指定文档的
dc_mv.append(dict_info)
dc_mv
# 插入前 先清空
ct_mv_info.delete_many({
})
# 插入文档
ct_mv_info.insert_many(dc_mv)
4.3 查询MongoDB的数据
ct_mv_info.find_one()
4.4 同样的操作插入影评
先处理信息,将原先的DataFrame的影评信息转化为可插入到MongoDB的dict字典
# list_mv[1] 输出结果 dict_keys(['reviews', 'star'])
# 查询保存的列表数据
# for x in list_mv[1].values.to_list():
# print(x)
'''
根据之前的存储信息获取所有电影的影评, 封装成可插入MongoDB的 dict
'''
def getAllReviews() -> list[list]:
index = 0
reviews = []
for i in range(len(list_mv)):
# 获取每一列
rv_cols = list_mv[0]['reviews'].columns
# 表示当前的评论标号
i = 0
# 记录当前电影的所有影评信息
dc_reviews = []
for k, rows in list_mv[index]['reviews'].iterrows():
# 根据电影ID和当前的评论序号定义_id
dict_info = {
'_id' : mv_data['mv_id']