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

#开发工具

**Python版本:**3.6.4
相关模块:
argparse模块;
requests模块;
jieba模块;
wordcloud模块;
以及一些Python自带的模块。

新浪微博相关文件



关注并转发后私信回复“新浪微博”获取。



#环境搭建


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



#原理简介

一. 爬虫目标

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

二. 模拟登录

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

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

https://passport.weibo.cn/signin/login?entry=mweibo&res=wel&wm=3349&r=https%3A%2F%2Fm.weibo.cn%2F

界面如下:

image

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

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

image

登录需要post的数据包括:

image

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

image

三. 评论数据爬取

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

移动端界面:

image.gif

PC端界面:

image

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

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

image

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

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

获得的评论数据如下:

image

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

image

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

image

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

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

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

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

当然可以!

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

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

image

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

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

image

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


#使用说明

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

image

例如:

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

简单运行一下,截个图:

image

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

comments_当前时间戳.pkl

注意:

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


数据可视化

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

image

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



更多

新浪微博相关文件
关注并转发后私信回复“豆瓣国产”获取。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章