大家平常都喜欢看公众号的文章,但是仅仅是文章内容又不足以使我们更好的参与与作者的互动,于是我找了一篇公众号的最新文章评论进行爬取分析。
这是效果图:
结尾有彩蛋欧…
废话不多说,现在开始跟我来实现这个充满黑科技的词云图把!!!
附:源代码下载链接
环境:
- Windows10
- Anaconda(Python的IDE):Windows10下安装Anaconda3(64位)详细过程
- Fiddler(抓包工具):Fiddler的安装与使用
- 相关的库
首先我利用的是Python的requests库来模拟请求,如果没有下载的同学就请打开cmd,如果你已经对Anaconda配置过环境变量了,就直接输入以下命令:
pip install requests
现在我们开始来准备编写代码
我们打开Jupyter Notebook
Ps:当然你也可以用Spyder,如何使用请看我上面的那篇Anaconda的安装博客
在你配置了Anaconda的环境变量的前提下,你打开cmd,在命令框中输入命令
jupyter notebook
就会运行如图所示:
然后就会自动打开一个浏览器页面,如图所示:
每个人的默认工作路径是C盘的用户目录下
然后新建一个文件(点击右上角的New后选择Python3)
创建成功后进入如图所示:
现在我们就开始码代码啦
首先我们要导入我们所需要用到的库
第二步就是通过抓包工具分析公众号评论的请求链接(url)和请求头(headers)
这里我使用的是Fiddler工具,具体安装使用请参考我的另一篇博客Fiddler的安装与使用
我们在配置好Fiddler后打开手机微信,找到你所想要的文章并打开,这里我显示的是我所分析的那一篇推文
然后你就首先根据Host查找到属于微信的mp.weixin.qq.com这个主机所对应的一系列请求
一个一个点开(因为第一次分析你也不知道哪个请求对应的是评论)然后思路是找到响应内容最多的那个。
经过漫长的寻找我们找到了这个请求(抓包是一个很繁琐的过程,因为你需要准确定位到你所需要查找的那个请求,所以大家在学习的过程中需要耐心一点)
还有如果你得到的响应内容是乱码,那么你需选中你找到的那个请求右键选择Decode…
这样就解码成功啦
当然不要高兴的太早,在这里你还需要将这个请求的url和headers复制到粘贴板中,因为我们的代码需要它们。
首先我们来看一下requests库里面的get方法
requests.get(url, params=None, **kwargs)
从表达式这里看出url是必须要有的,还有其它的比较重要的参数例如headers、timeout
将我们粘贴板中的url和headers复制到代码中,如图
链接(url)直接复制上去赋值给url就行了,但是headers需要做一下进一步的处理,这里我就不解释里面各参数的含义了,经测试发现只有Cookie是需要加上去的,连User-Agent都不用,这里我解释一下为什么,因为这里我们其实访问的是一个评论接口,而接口一般对爬虫的UA是没有做反爬处理的,所以最后我们保留Cookie一行加进headers字典里面就行了。
然后第一个难点抓包(分析请求)搞定了,接下的难点来就是处理响应内容了。
当然首先我们向服务器发出请求
最终我们得到了一个字典类型的数据,然后我们观察一下字典的结构
得到大概结构以后我们来迭代输出每一行评论信息,并把评论内容存储到字符串里面(倒数第一行代码是在做结巴分词,后面那个参数5指的是返回切分后权重值最高的5个词组)
这里看起来是比较繁琐,其实就是根据列表、字典结构的特性根据索引或者关键字来取值,这一步最关键的是要理清返回内容的结构,结巴分词只是调用api而已。
看到了排列整齐的评论,你离成功只差个词云图,接下来就是词云图的制作,这里主要用了
词云库:wordcloud
画图的库:matplotlib.pyplot
如果你没有安装wordcloud库,建议去官网下载wordcloud的whl文件本地安装(踩过的坑,默默不说话)
代码如下:
大概讲一下流程,先读取背景图片1.png,然后通过WordCloud来设置相应的参数。
这里注意一点,因为WordCloud里面默认的语言是英语,所以你需要往里面加载一个简体中文的字体,一般Windows10自带的有的,你文件搜索一下,改一下路径,如果没找到就去网上下载一个。
接着读取字符串Comments(已经分词过了),为了以后方便查看把图片存储下来。
最后就是画图了,其实你不画找到存好的文件打开也是可以的,但是程序员能这样吗!!!
不能,能用代码实现的我就不用其他方法。
这里我们用的是数据分析流行的画图库matplotlib
将wc传进去imshow方法,设定一下插值的参数为bilinear
设置off参数不显示难看的坐标轴
最后大功告成,你也做了一张充满黑科技感的词云图啦。
是不是在找彩蛋在哪,不要慌,就是下面那狗,皮一下。
我的个人博客网站是:www.coderyyn.cn
上面会不定期分享有关爬虫、算法、环境搭建以及有趣的帖子
欢迎大家一起交流学习
转载请注明