用Fiddler+MongoDB抓取猫眼APP短评
毒液这部电影自上映后就好评,热搜不断,可见其火爆程度。笔者为了让文章更加贴近生活(实际是为了涨粉),打算爬一爬关于毒液的短评。
之前爬过豆瓣的影评,不过它只显示500条,而猫眼网页端的反爬也做的非常好,仅可见10条短评,所以只能从手机端着手了。下载猫眼APP,点开电影毒液的短评合集,可以看到最新的短评,这些数据是异步加载的,不断往下滑,就会有数据不断的出现。
下面就是使用Fiddler对手机进行抓包了。Fiddler的安装非常简单,就和安装QQ一样,自己可以独立完成。
Fiddler安装好以后,让手机和电脑使用同一个WiFi,找到本机IP地址后,对手机端链接的Wifi进行代理配置,端口默认为8888,服务器是你的本机IP地址。
你以为这样就可以抓包了???错!这是最重要的一步,手机打开192.168.1.107:8888,下载根证书后安装在手机上。完成这步之后就可以抓包了,不然你会处于连了WiFi却上不了网的尴尬处境。
现在开始正式抓包。打开短评后,不断往下翻,在fiddler不断的有更新,点开Host为m.maoyan.com的#为json的链接。
右上角的Raw标签中,有具体的URL,右下角的JSON标签中是需要抓取的数据。抓取JSON数据的代码如下:
html = requests.get(url, headers=headers).json() datas = html['cmts'] com = [] for data in datas: inf = {} inf['comment'] = data['content'] inf['city'] = data['cityName'] inf['name'] = data['nick'] inf['score'] = data['score'] inf['reply'] = data['reply'] inf['apptime'] = data['startTime'] inf['urseid'] = data['userId'] inf['approve'] = data['approve'] com.append(inf)
下面分析其url:https://m.maoyan.com/mmdb/comments/movie/42964.json?_v_=yes&offset=0&startTime=2018-11-6%2000%3A00%3A00--------其中42964是电影毒液的ID,startTime是只从哪个时间开始往前搜,下图用红线画出了各个短评发布的时间,现在这个url表示从20018年11月6日零点零分零秒开始往前搜,第一条短评发布的时间为2018-11-05 23:53:59,第二条短评发布的时间为2018-11-05 23:39:48;依次类推。
offset表示以starttime为起点往前搜,每页第一条短评的编号,0,15,30......注意,offset最多到1000,1000以后返回下图:
所以,整体的循环思路为:获取每面最后一条短评的发布时间,拼接成新的url,其中offset一直设置为0。
if __name__=='__main__': endtime='2018-11-06 00:00:00' apptime=datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') #apptime='2018-11-15 15:02:19' while endtime<apptime: time.sleep(random.randint(1,2)) url = 'https://m.maoyan.com/mmdb/comments/movie/42964.json?_v_=yes&offset=0&startTime={}'.format(parse.quote(apptime)) apptime=get_comment(url) print(apptime)
最后将所有爬到的数据都存进MongoDB中。
from pymongo import MongoClient collection=MongoClient('localhost',27017) collection=collection.movie collection=collection['毒液']#将python 与MongoDB链接 com=[] collection.insert_many(com)#将数据存入数据库中
整体的数据看起来非常漂亮,而且对数据进行增删查减也不会出现乱码的现象,所以非常推荐大家以后将数据存到数据库中。
完整的代码已上传Github,https://github.com/zuobangbang/movie
本文的初衷在于掌握Fiddler抓取App以及Mongodb的使用,所以相关的可视化分析就不进行了。如果大家感兴趣可以自行抓取分析。但是后续会出一篇关于MongoDB各种操作的文章,帮助掌握MongoDB。
作者: zuobangbang