查看原文
其他

《毒液》:用Fiddler+MongoDB抓取猫眼APP短评

zuobangbang Python爱好者社区 2019-04-07

作者:zuobangbang
微信公众号:zuobangbang


毒液这部电影自上映后就好评,热搜不断,可见其火爆程度。笔者为了让文章更加贴近生活(实际是为了涨粉),打算爬一爬关于毒液的短评。



之前爬过豆瓣的影评,不过它只显示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。



Python爱好者社区历史文章大合集

Python爱好者社区历史文章列表(每周append更新一次)

福利:文末扫码立刻关注公众号,“Python爱好者社区”,开始学习Python课程:

关注后在公众号内回复“课程”即可获取:

小编的转行入职数据科学(数据分析挖掘/机器学习方向)【最新免费】

小编的Python入门免费视频课程!!!

小编的Python快速上手matplotlib可视化库!!!

崔老师爬虫实战案例免费学习视频。

陈老师数据分析报告制作免费学习视频。

玩转大数据分析!Spark2.X+Python 精华实战课程免费学习视频。


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存