说电影《悲伤逆流成河》
前言
电影《悲伤逆流成河》上映已经半个月了,热度消散,为什么现在还要来说呢?基于两点:
- 第一点:无聊,说说电影打发时间嘛;
- 第二点:因为热度消散,无论哪一方的水军都会撤退,数据会更贴近真实。
当然了,第一点是真实原因,第二点在瞎掰。
接下来将分三个部分。第一部分爬取猫眼关于《悲伤逆流成河》的影评存储到MongoDB中,第二部分用爬取到的数据简单实现一下数据可视化,第三部分是对差评的点评。
爬取猫眼影评
事实上直接访问猫眼官网,点进《悲伤逆流成》,浏览器拉到最下就是影评了,问题是我只看到了热门影评,没有加载更多的提示。
这个时候转换策略,可以考虑移动端。但并非一定要用Fiddler等稍微麻烦的工具,有时候浏览器可以帮我们搞定一切。
右键->检查,点击左上角第二个图标
我选择模拟iPhoneX,100%显示。此时你也许需要刷新一下界面,看起来才会正常。
现在就可以查看全部短评了。跟以前的每一次爬虫流程一样,下拉界面,在Network中监测数据,找到了后台接口(http://m.maoyan.com/mmdb/comments/movie/1217236.json)
这个时候我们可以利用requets模块写一个小爬虫,看能否成功返回数据(当然是可以的,因为我已经尝试过了)。
整个过程没有什么难点,但有个意外之处。虽然猫眼说可以查看3.9万的短评,但实际上这个接口只对外公开了1000多条短评。当偏移量(offset)等于1000的时候尚有评论的数据返回,等于1001的时候返回{total: 0}
。所以这里有一个需要注意的地方,猫眼每次加载会返回15条评论,偏移量从0开始,到1000结束,如果我们遍历range(0, 1000, 15)
来获取offset,事实上是得不到offset=1000
的。
我这里的处理方式是构造一个生成器(自然也可以用穷举的策略,但是那样很可能会浪费内存):
class Offset(object):
"""生成偏移量,使其能够包含边界数"""
def __init__(self, left, right, step):
self.left = left
self.right = right
self.step = step
self.count = left
def __iter__(self):