上次谢了如何在豆瓣找适合自己的图书看,这次我们来挑一挑电影。
要怎么挑一部自己可能会喜欢看的电影呢,好多人喜欢上豆瓣上看评分,不过啊,豆瓣文青数量太庞大,鉴赏水平跟我们普罗大众完全不在一个水平,怎么从众多文青中筛选出一个跟咱审美能匹配上的影评人呢?
下面说一说我用网络爬虫解决这个问题的思路:
Paste_Image.png
第一步、寻找几个活跃的影评人
这里采用的方法是随机爬取看过的电影数量最多的影评人。这里我选择在近期热门电影下寻找,筛选标准是评价过的电影500(这个数字是不是很可怕,但是你注意观察的话,会发现豆瓣上这样的雷锋有很多)。
代码就不贴了,我们将爬取出来的数组存入Pandas库的DataFrame数据类型中:
<code>
df = pandas.DataFrame({'author': authors, 'id': ids, 'movie_num': movienum_list})
</code>
结果是这样的:
然后我们再从中筛选出评价过的电影量大于500的。
这里抓取了用户id,是为了以后方便打开各个用户的个人主页
第二步、爬取这些影评人对众多电影的评分
同样,继续讲述我的思路。
首先把之前筛选出来的用户和他们的id存入DataFrame:
Paste_Image.png这里因为热门评论页面中筛选出来的人数不多,我选择了手动输入的方式。
然后呢,根据id打开每个人各自评论过的电影的界面:
Paste_Image.png然后抓取电影评分数据,存入到字典中,如下图所示:
Paste_Image.png这里我用正则表达式把所有英文字母全部去掉了。
第三步、对自己看过的电影进行打分
回忆一下你看过什么电影呢?想不起来了吗?那就对照着别人看过的电影回忆一下吧。
自己打个分吧,也按照这个字典的格式输入到代码中:
<code>
My_film = {'摆渡人':'1','太空旅客':'4','波普先生的企鹅':'3','小羊肖恩':'4','速度与激情7':'2','疯狂外星人':'2','西游记之大圣归来':'5','疯狂动物城':'5','火锅英雄':'4','寻龙诀':'3','追凶者也':'5','釜山行':'4','王牌逗王牌':'1','从你的全世界路过':'2','湄公河行动':'4','我不是潘金莲':'3','爵迹':'1','九层妖塔':'1','云图':'5','狼图腾':'2','后会无期':'4','环形使者':'3','极盗者':'1','一代宗师':'5','绣春刀':'4','谍影重重4':'4','火星救援':'4'}
</code>
自己评价的 电影越多,准确度越高
第四步、将自己与几个影评人的评价结果进行对比
先寻找评价过的电影的交集:
<code>
dic = dict.fromkeys([x for x in His_film if x in My_film])
</code>
返回是这样的:
然后我们再利用这些共同key来进行计算
我们可以选择最简单的欧几里得距离或者皮尔逊系数来衡量我与影评人之间的差别。
<code>
for m in id_list:
His_film = scroll(m)
His_list = []
My_list = []
for k in dic.keys():
His_list.append(His_film[k])
My_list.append(My_film[k])
print(His_list, My_list)
sum = 0
for i in range(len(His_list)):
sum += math.sqrt((int(His_list[i]) - int(My_list[i])) ** 2)
print('欧几里得距离', sum)
</code>
然后筛选出欧几里得距离最小的那个用户,就算完成了。
最后、关注跟你兴趣最相近的影评人
有兴趣转行机器学习的朋友可以加群:
机器学习-菜鸡互啄群
网友评论