第一步
打开一个电影的评论界面:
哪吒之魔童降世:https://maoyan.com/films/1211270
我们发现这里只显示10条评论,而我们需要爬取10w条数据,所以不能从此页面进行抓包,所以放弃!!!!
于是又上网查,终于看到一篇文章说到开发者模式可以直接切换到手机模式;
第二步
切换开发者模式为手机模式
切换模式后可以看到所有评论都显示出来了,我们可以直接抓包进行分析
第三步
点击查看全部讨论
开发者工具切换切换XHR,然后一直下滑查看评论
每条请求所对应的数据
http://m.maoyan.com/review/v2/comments.json?movieId=1211270&userId=-1&offset=15&limit=15&ts=1564996441232&type=3 # movieId 表示电影ID # offset 表示偏移量 # limit 一页显示多少数据 # ts 当前时间戳
通过多次下滑观察可以看到每次都是offset在变化,而且每次加15,也就是增加15条评论,知道了这个规律其实大家都应该会做了,但是还有个问题,这个方法只能爬取1000条数据,除非改变时间戳,也就是ts,
第四步
我们在上面的方法基础上改变时间戳后发现也只能爬取1000条数据,我们只能另寻他法;
于是我们通过百度知道了有另外一个api可以获得猫眼电影的评论数据
http://m.maoyan.com/mmdb/comments/movie/1211270.json?_v_=yes&offset=0&startTime=2019-08-04%2018:18:53
# 只需要改变startTime,根据时间段来获取评论数据
# 每次获取的评论数据还是15条
查看每页中最后一条数据的startTime
根据上面的原理我们制定爬取方案:
因为我们请求网页所得到的响应数据只用15条,且可以获取到最后一条数据的startTime;
第一次请求url中的startTime我们用当前时间,并获取响应数据中最后一条数据的startTime;
第二次请求时我们将时间替换为第一次请求时响应数据中最后一条数据的startTime,依次类推
直到时间为电影的上映时间即可获取该部电影的所有评论数据;
from pymongo import MongoClient my_client = MongoClient("127.0.0.1",27017) MDB = my_client["Movie_rating"] # 指定连接电影评分的库名 print(MDB.Movie_comment.find({}).count()) # 查看表中一共有多少条数据