An analyzer and recommender for films and actors.
1.采用python爬虫,利用selenium、BeautifulSoup、requests等库
2.框架结构
def run_task(self):
"""
执行工作任务
逻辑:获取演员主页的链接 -> 爬取演员的基本信息并保存到数据库 -> 爬取演员的获奖信息并保存到数据库 -> 获取演员所参演电影的链接 -> 爬取演员参演电影的基本信息并保存到数据库
"""
# 获取演员主页链接
actor_address = self.get_actor_home_page_address()
# 解析演员基本信息
actor_c_name, actor_img, actor_gender, actor_horoscope, actor_birthday, actor_birthplace, actor_career = self.parse_actor_info(actor_address)
# 存储演员基本信息到数据库
self.save_actor_info(actor_c_name, actor_img, actor_gender, actor_horoscope, actor_birthday, actor_birthplace,
actor_career)
# 获取演员获奖信息
award_list = self.parse_actor_awards()
# 保存演员获奖信息到数据库
self.save_actor_awards(award_list)
# 获取演员参演的电影链接
film_address_list = self.get_actor_films_address()
print(film_address_list)
# 解析电影的基本信息
film_info_list = self.parse_film_info(film_address_list)
# 保存演员获奖信息到数据库
self.save_film_info(film_info_list)
- 用户未喜欢任何演员时随机推荐演员
- 用户个人信息设置
- 优化未查找到相似用户时的初始化问题
- 实现基于用户的协同过滤推荐,演员推荐分数=喜欢该演员的其他用户与本用户的平均相似度*该演员与本用户喜欢的演员平均相似度
- 计算用户相似度
- 推荐模块填写信息的传递
- 增加相似度算法选择,可在余弦相似度和欧氏距离之间切换
- 设计演员推荐界面
- 新增用户喜爱演员功能
- 完善用户信息显示
- 新增用户登录、注册、找回密码功能
- 更新部分路由,保持系统一致性
- 增加电影搜索结果按照年份或者评分排序选项
- 给学弟学妹们开最后一次会议,基本框架已经成型
- 计算演员的相似度,以16号演员为例,计算得到的演员相似度情况,越靠前越相似
余弦相似 [16 15 18 14 6 19 4 10 8 17 5 12 9 1 7 13 2 11 0 3]
欧氏距离 [16 15 14 10 18 19 6 4 12 5 17 7 1 2 8 0 11 13 3 9]
- 完成演员电影类型计算
- 完成演员的如下特征提取
性别、年龄段、平均电影评分、平均电影评论、获奖个数、电影部数、职业多样化、出生地、星座、平均五星率、平均四星率、平均三星率、平均两星率、平均一星率、是否国际化、电影类型总数
- 给学弟学妹开第三次会议,进展不错
- 演员推荐系统需要哪些特征?(性别、年龄段、平均电影评分、平均电影评论、获奖个数、电影部数、职业多样化、出生地、星座、平均五星率、平均四星率、平均三星率、平均两星率、平均一星率、是否国际化、电影类型总数、每种类型占比)
- 开会,学弟学妹的项目需要更加细致才行
- 设计演员出演电影类型的饼图
- 测试Apriori算法效果,min_support参数不宜太小,否则计算量过大
- 给学弟学妹答疑第一周工作任务,安排第二周工作
- 编写部分Apriori关联挖掘算法
- 完成演员出演电影的类型分布计算
- 完成演员出演电影的地区分布计算
- 按照年份给出演员出演电影的类型
- 修改Actors表的结构,新增电影平均分数和平均评论人数
- 利用接口完成演员的电影平均分数和平均评论人数计算和保存
- 更新farsystem.sql文件
- 修改flask项目的文件框架
FLASK_APP = run.py
FLASK_ENV = development
FLASK_DEBUG = 1
In folder E:/PythonCode/FARSystem
E:\PythonCode\FARSystem\venv\Scripts\python.exe -m flask run
- 完成演员数据的爬取并保存到数据库
# 电影演员名单列表,男女各10位,年龄阶段分别为20+、30+、40+
actor_name_list = ['杨紫', '周冬雨', '关晓彤', '迪丽热巴', '杨幂', '刘诗诗', '范冰冰', '海清', '赵薇', '章子怡',
'吴磊', '张一山', '刘昊然', '易烊千玺', '黄轩', '王宝强', '彭于晏', '刘烨', '吴京', '黄晓明']
for actor in actor_name_list:
Spider(actor).run_task()
- 将数据库转储为SQL文件(farsystem.sql)
- 给学弟学妹们讲项目任务分工以及第1-2周的工作内容
- 补充电影信息之导演信息的爬取
- 完成电影信息解析的代码,并保存到数据库
- 完善演员基本信息解析的代码
- 完成演员获奖信息的爬取
- 完成演员基本信息和获奖信息保存到mysql数据库
- 爬虫代码编写,目前处于解析演员基本信息阶段