美文网首页@IT·互联网
用数据说话——我来爬一爬《毒液:致命守护者》的豆瓣电影信息

用数据说话——我来爬一爬《毒液:致命守护者》的豆瓣电影信息

作者: LightningFox | 来源:发表于2018-11-08 18:25 被阅读68次

近年来大数据、数据挖掘、人工智能、机器学习大热,同时也带动Python迅速崛起,顺应时代发展,为了不掉队,我也用Python写个网络爬虫练练手。得益于众多的第三方开源库,仅350行代码就完成一个集网络数据采集、存储、分析的小爬虫,主要代码就不贴了。


源码已上传至https://github.com/lightningfox85/LFDoubanMovieSpider(使用百度自然语言处理接口做感情倾向识别需自行准备百度App ID、Api Key及Secret Key,当然也可以使用本地的SnowNLP库完成,改下参数就行),说下思路。

一、确定需求。
通过爬取豆瓣的用户影评数据,分析电影更多的信息,如评论的关键词、用户情感倾向和用户算术平均分等。观察豆瓣电影页面可知有三处可取得用户评分数据的位置:



位置一的“评价”大多只有评分,极少有影评文字:



位置二的“短评”虽然有评价,但只有“有用”数(支持人数):

位置三的“影评”,不仅有评论和“有用”数,还有“无用”数(反对人数),缺点是数据样本会比较少,可能是愿意写影评的人太少了的原因吧:

为了数据内容更丰富,牺牲下样本数量,这里选择了“影评”数据做为抓取的目标。

二、分析页面构成,爬取影评数据。
可以加以利用的目标数据包括评论的用户名,评分(一星至五星),有用数,无用数及影评内容。
通过分析页面构成,了解到每个页面含有20个影评,地址规则如下:
https://movie.douban.com/subject/{豆瓣电影ID}/reviews?start={页面索引}
其中页面索引为20的倍数,形如:
https://movie.douban.com/subject/3168101/reviews?start=0
https://movie.douban.com/subject/3168101/reviews?start=20
https://movie.douban.com/subject/3168101/reviews?start=40

另外在该页面的短评并不是完整影评,还可以“展开”:


继续跟踪网页请求得知点击“展开”每个短评还将发送一个Ajax请求来获取JSON格式的完整评论数据:

该请求地址为:https://movie.douban.com/j/review/{短评ID}/full
因此爬取20个短评的一页内容需要最多21次请求,由于豆瓣有反爬机制,还需加入人工延迟避免过快抓取页面而导致直接封IP,当然这也极大地增加了爬取的时间。并且当评论页面较多时(好像是50页吧,不太记得了…)需要登录豆瓣账号使用其Cookis状态模拟人工登陆账号状态爬取。目前已知的豆瓣反爬措施有封IP(未登录,不使用登录账号Cookis)和暂时锁定账号。

通过使用Requests 库抓取页面,并使用BeautifulSoup4库和 lxml 库解析网页 ,同时将爬取的数据写入CSV文件中,以备后期使用。

抓取后保存的原始数据如下图:

二、数据清洗
为保证后面数据分析降低错误率,有效完成数据分析,需要将抓取的数据进行清洗,这里仅处理了以下4种数据的清洗:
1.不完整缺失数据处理:填充空的“有用数”和“无用数”为0。
2.异常值处理:未评分的设为'无'。
3.噪音数据处理:Html标签清洗,去掉影评中的Html标签。
4.重复数据处理:去除重复评论。

三、生成词云图
使用结巴分词库对短评进行分词,再根据词频由WordCloud库生成词云图,将关键词可视化,其中最高频的词汇直观可以发现是“毒液”和“蜘蛛侠”,说明了主角与“蜘蛛侠”的渊源:


四、影评情感倾向分析
原先准备使用SnowNLP库对影评文本进行情感倾向分析,但结果大失所望,没有针对电影评价训练过的自带字典置信度太低,自带字典仅对购物评论做了训练。继续寻找发现百度自然语言处理API提供了情感倾向分析接口,经过测试,结果比较满意,于是改用百度自然语言处理API来完成该部分功能。



通过计算出评价文本的积极概率(越接近1为正面积极情绪,接近0为负面消极情绪),绘制影评情感倾向分析图,了解影评的情感倾向和分布情况,可直观发现75.3%的用户影评中带有正面积极地情绪:


五、用户评分分析 – 计算算术平均分

最后通过收集到的影评用户评分,准确的说应该是影评用户评星才是,按五种评星(力荐5分、推荐4分、还行3分、较差2分、很差1分)和没有评分的按0分计乘以2换算至十分制,并且未评分用户不计入总人数。计算结果如下:



该结果与目前豆瓣给出的7.2分,两者相差5%左右,这主要是由于数据源不同而导致的,也许是愿意花时间写影评的豆瓣用户对该电影的评价高于一般只评分的豆瓣用户。
豆瓣电影评分使用的数据按官方说法是“将豆瓣成员的评价数据加权平均计算后的结果,通过算法的调校,使得海量用户主观喜好的聚合能够更客观准确地反映条目本身的价值。”,但其算法是什么并没有直接说明。将“位置一”处看过的人评分,同样也按上述规则将五星制转换成十分制,这里用Excel快速测算下,可以看出该口径计算的出评分与现在的豆瓣电影给出的评分是一致的:


按上述验证的豆瓣电影评分基本规则可知豆瓣应该没有2分以下的电影,所以顺便看了下这部“传奇电影”《纯洁心灵·逐梦演艺圈》的相关数据,直接上图吧:





相关文章

网友评论

    本文标题:用数据说话——我来爬一爬《毒液:致命守护者》的豆瓣电影信息

    本文链接:https://www.haomeiwen.com/subject/dmtgxqtx.html