Python爬取新浪微博评论数据,你有空了解一下?

开发工具


Python版本:3.6.4
相关模块:
argparse模块;
requests模块;
jieba模块;
wordcloud模块;

以及一些Python自带的模块。


环境搭建



安装Python并添加到环境变量,pip安装需要的相关模块即可。



原理简介

一. 爬虫目标

爬取某条微博底下的评论数据。

二. 模拟登录

爬像新浪微博这样的大网站,不用想就知道不登录肯定是爬不了多少数据的(事实就是不登录的话只能爬第一页的评论数据)。

这里为方便起见,我们选择用微博的移动端接口进行模拟登录。即:

https://passport.weibo.cn/sig...

界面如下:

Python爬取新浪微博评论数据,你有空了解一下?_第1张图片

简单抓包可以发现登录链接为:

https://passport.weibo.cn/sso...

Python爬取新浪微博评论数据,你有空了解一下?_第2张图片

登录需要post的数据包括:

Python爬取新浪微博评论数据,你有空了解一下?_第3张图片

于是我们就可以愉快地写模拟登录微博移动端的代码啦~具体代码实现如下:

Python爬取新浪微博评论数据,你有空了解一下?_第4张图片

三. 评论数据爬取

这里我们以爬取胡歌的最后一条微博的评论数据为例。

移动端界面:

image.gif

PC端界面:

Python爬取新浪微博评论数据,你有空了解一下?_第5张图片

由于我们模拟登录的是移动端,所以我们只能从移动端爬取微博的评论数据。

移动端简单抓包可以发现只要请求下图这个链接就能获取这条微博的第一页评论数据了:

Python爬取新浪微博评论数据,你有空了解一下?_第6张图片

其中,id和mid是相同的,就是该评论页链接橙色加粗的部分:

https://m.weibo.cn/detail/4341031648799308

获得的评论数据如下:

Python爬取新浪微博评论数据,你有空了解一下?_第7张图片

那么第二页呢?其实也很简单,可以发现只要请求下图这个链接就能获取这条微博的第二页评论数据了:

Python爬取新浪微博评论数据,你有空了解一下?_第8张图片

其实就是比第一页多了两个参数,这两个参数其实就藏在返回的第一页评论数据里:

Python爬取新浪微博评论数据,你有空了解一下?_第9张图片

以此类推,第n页所需的max_id和max_id_type参数就藏在返回的第n-1页评论数据里。

可以发现,当该页返回的max_id为0时,表示该页是该条微博底下评论的最后一页。

于是,我们就可以爬到该条微博下方的所有评论数据啦!(QAQ当然前提是网站没有其他的反爬措施,这个显然不太可能。)

那么PC端的微博评论页链接能不能转换为对应的移动端微博评论页链接呢?毕竟我们在电脑上一般都用的PC端接口登录然后看微博啊!

当然可以!

在胡歌最后一条微博评论页的PC端界面,我发现了这个:

注意:请求微博PC端的链接时,需要加cookie信息,经测试,只需要加cookie里的SUB参数就行了,详见相关文件中的源代码

Python爬取新浪微博评论数据,你有空了解一下?_第10张图片

这不就是mid嘛,于是PC端的微博评论页链接就可以很容易地转换为对应的移动端微博评论页链接了。

所以微博评论数据抓取部分的代码就可以很轻松地写出来啦:

Python爬取新浪微博评论数据,你有空了解一下?_第11张图片

OK,大功告成~完整源代码详见相关文件~


使用说明

在终端运行weiboComments.py文件,命令格式如下:

Python爬取新浪微博评论数据,你有空了解一下?_第12张图片

例如:

python weiboComments.py -u 用户名 -p 密码 -m 10(即评论数据最多抓10页) -l 某条微博的评论页链接 -t pc(输入pc/phone,用于说明是PC还是移动端的微博评论页链接)。

简单运行一下,截个图:

Python爬取新浪微博评论数据,你有空了解一下?_第13张图片

数据保存在当前文件夹内,文件名为:

comments_当前时间戳.pkl

注意:

为避免给微博服务器带来不必要的压力,每爬一页我都设置了较长的停顿时间。


数据可视化

随手画个前十页评论的词云吧,其他数据懒得分析了:

Python爬取新浪微博评论数据,你有空了解一下?_第14张图片

源代码见相关文件中的vis.py文件。



更多

新浪微博相关资料
关注微信公众号:python工程狮,回复“新浪微博”获取



Python爬取新浪微博评论数据,你有空了解一下?_第15张图片



你可能感兴趣的:(python,pycharm,新浪微博,数据,网页爬虫)