早前向大家介绍了如何利用简单的API 接口抓取微博当刻的热搜排名,抓取到的数据除了可以做数据分析外,另一样更简单可做的就是资讯图,例如制作每天Top 50 的资讯图,这类图大多数都是样式重复,变化的都是内容,数据方面可以使用定时爬虫抓取,抓取数据的代码可参考早前的博文,样式方面可采用固定的图档,配合爬取的数据使用程式定时编制,实现全自动生成微博热搜排名图。 相比起直接使用手机网页截图发文,自制的资讯图更能突出博主的用心制作,更具特色。
以下部份我将讲解如何使用Python 制作微博热搜排名图,下图是完成后的最终效果
图像处理部份是使用 pillow 这个程式库: 所以首先要先安装pillow
pip install pillow
安装完成后,便可以编写主要代码,我采用了物件导向的程式设计,主要的代码都封装在一个名为ImageDrawer 的class 中
首先在建构函式传入使用到的热搜数据和热搜的时间
整个绘图的逻辑我都放在draw 这个方式内
首先定义一些基本参数
整张图片的宽是750px, 整体高度是由banner 的高度(350px) 再加上每笔数据显示的高度(52px) * 多少笔数据
其余变数是字体大小,文字颜色、背景颜色、底线颜色和星期等等。
第二步是调用pillow 程式库去绘画底图,底图是我使用Canva 自制的,大750px * 350px
在这里我们会调用pillow 程式库的三个方法,
使用Image.new 在记忆体内构建一张图片
调用Image.open 读取预先制作的图片,再调用Image 物件的paste 方法把预制图贴在新的图片内。完成以上的编程步骤后, 调用ImageDraw 模组,完成整个绘图工作
调用ImageDraw.Draw 建立一个ImageDraw 物件去处理刚刚建立的image
我在这张图内使用了黑体(Heit)和得意黑(SmileySans) 两种字体,分别用于
数字和普通文字。 图片的主要部份可分为日期和热搜标题两部份:
日期部份使用了ImageDrawer的text 和rectangle 方法,text方法是把文字输出到底图上,rectangle方法用作绘画分隔日期标题和热搜内容的底线
热搜贴文方面,使用for loop 把每条的热搜绘画在图片上。由于图片的顶部已预留横额和日期标标题,所以开始的Y轴位置在410
最后定义输出图片的方法,完成图片存档。
现在,作为博主的你便可以每天自动化生成属于你的微博热搜排名图