开发工具

**Python版本:**3.6.4

相关模块:

argparse模块;

requests模块;

jieba模块;

wordcloud模块;

以及一些Python自带的模块。

环境搭建

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

原理简介

一. 爬虫目标

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

二. 模拟登录

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

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

界面如下:

python怎么爬微博评论 python爬微博评论关系_模拟登录

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

python怎么爬微博评论 python爬微博评论关系_模拟登录_02

登录需要post的数据包括:

python怎么爬微博评论 python爬微博评论关系_python爬取微博恶评_03

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

python怎么爬微博评论 python爬微博评论关系_模拟登录_04

三. 评论数据爬取

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

PC端界面:

python怎么爬微博评论 python爬微博评论关系_python爬取微博恶评_05

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

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

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

获得的评论数据如下:

python怎么爬微博评论 python爬微博评论关系_移动端_06

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

python怎么爬微博评论 python爬微博评论关系_数据_07

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

python怎么爬微博评论 python爬微博评论关系_python爬取微博恶评_08

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

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

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

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

当然可以!

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

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

python怎么爬微博评论 python爬微博评论关系_数据_09

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

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

python怎么爬微博评论 python爬微博评论关系_python爬取微博恶评_10

OK,大功告成~完整源代码详见相关文件~新手学习,Python 教程/工具/方法/解疑+V:itz992

使用说明

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

python怎么爬微博评论 python爬微博评论关系_python爬取微博恶评_11

例如:

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

简单运行一下,截个图:

python怎么爬微博评论 python爬微博评论关系_python爬取微博恶评_12

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

comments_当前时间戳.pkl。

注意:

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

数据可视化

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

python怎么爬微博评论 python爬微博评论关系_模拟登录_13

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