情人节,给你的女神准备了什么礼?鲜花太普通,钻戒太贵,程序猿可以尝试用一种特别的方式来表达你对女神的"爱"意,有一个创意是把她过往发的微博整理后用词云展示出来。这样能体现程序猿的神秘与专业性,本文就教你怎么用 Python 快速创建出有心意词云,Python 小白也能分分钟做出来。
很早之前写过一篇怎么利用微博数据制作词云图片出来,之前的写得不完整,而且只能使用自己发的微博,现在重新整理了一下,任何人的微博都可以制作出来,放在今天应该比较应景,祝天下有情人终成眷属
准备工作
本环境基于 Python3,理论上 Python2.7也是可行的,先安装必要的第三方依赖包:
requirement.txt 文件中包含上面的几个依赖包,如果用 pip 方式安装失败,推荐使用 Anaconda 安装
第一步:分析网址
先登录微博网页端,然后切换到微博移动端网址https://m.weibo.cn/,找到女神的微博ID,进入她的微博主页,分析浏览器发送请求的过程
打开 Chrome 浏览器的调试功能,选择 Network 菜单,观察到获取微博数据的的接口是https://m.weibo.cn/api/container/getIndex,后面附带了一连串的参数,这里面有些参数是根据用户变化的,有些是固定的,先提取出来。
再来分析接口的返回结果,返回数据是一个JSON 结构,total 是微博总条数,每一条具体的微博内容封装在 cards 数组中,具体内容字段是里面的 text 字段。很多干扰信息已隐去。
第二步:构建请求头和查询参数
分析完网页后,我们开始用 requests 模拟浏览器构造爬虫获取数据,因为这里获取用户的数据无需登录微博,所以我们不需要构造 cookie信息,只需要基本的请求头即可,具体需要哪些头信息也可以从浏览器中获取,首先构造必须要的请求参数,包括请求头和查询参数。
uid 是微博用户的 id
containerid 虽然不什么意思,但也是和具体某个用户相关的参数
page 分页参数
第三步:构造简单爬虫
通过返回的数据能查询到总微博条数 total,爬取数据直接利用 requests 提供的方法把 json 数据转换成 Python 字典对象,从中提取出所有的 text 字段的值并放到 blogs 列表中,提取文本之前进行简单过滤,去掉无用信息。顺便把数据写入文件,方便下次转换时不再重复爬取。
第四步:分词处理并构建词云
爬虫了所有数据之后,先进行分词,这里用的是结巴分词,按照中文语境将句子进行分词处理,分词过程中过滤掉停止词,处理完之后找一张参照图
然后根据参照图通过词语拼装成图。
wordcloud 必须指定中文字体,否则遇到中文会乱码,简单四步就完成了,最终效果图:
学习Python和网络爬虫关注公众号:
datanami
入群请回复「学习」
领取专属 10元无门槛券
私享最新 技术干货