共计 2066 个字符,预计需要花费 6 分钟才能阅读完成。
昨天有很多同学在朋友圈秀六级成绩
一个个都如 (sang) 此(jin)优 (tian) 秀(liang)
当然也有悲催的哥们
对于上面这位老弟
我只能说:骚呢,兄弟
这种事都能赶上,必须点赞
一、需求分析
在刷朋友圈的时候,看到很多同学截图不规整啊(没错,猪哥处女座),有些准考证号还没打马赛克,于是猪哥就在想能不能用 Python 生个四六级成绩截图出来,最好还能自动打码,这样岂不是可以直接发朋友圈,装逼一步到位!(别人在秀成绩,你不光可以秀成绩,还可以秀 Python)
二、功能设计
很多同学会模仿别人代码,而自己却不知道去如何做一些小项目,其实问题就是在于:你不知从何下手!
作为开发人员在工作中都是接需求,所以自己做项目的第一步就是:搞清楚自己要做什么(功能),然后再去量化功能,分步实现!
接下来我们就来看看今天要做一个什么有趣的东西吧!
- 查成绩:首先我们通过 requests 库去学信网查询成绩
- 生成截图:查完成绩之后就直接生成截图,截图最好只有中奖有效信息部分
- 打码:对于准考证号进行打码
三、技术实现
确定了要做的功能并量化细分完毕后,我们就可以开始敲代码实现了,这里就按照之前细分的步骤一步一步实现就好了!
1. 查询四六级成绩
首先我们需要找到四六级的查询入口,这里首选:https://www.chsi.com.cn/cet/i…
然后我们调出调试窗口,输入准考证号和姓名。记得勾选左上角的 Preserve log
然后我们就可以在 Network 看到第一个请求就是获取四六级结果的请求
拿到 URL 我们就可以开始使用 requests 库模拟请求啦,非常简单的一个 post 方法!
来看看返回的结果,是一个 html 网页!
2. 使网页生成图片
这里我们会使用到一个 软件:wkhtmltopdf,注意这是一个软件而不是 python 库,我们先要安装这个软件!
官网下载地址:https://wkhtmltopdf.org/downl…,注意这个网站下载需要打开 VPN,不然下载超级慢!
猪哥事先已经把他们都下载放在百度网盘里:wkhtmltopdf 软件下载链接 :https://pan.baidu.com/s/11VOo… 密码:4xuv
下载后直接安装就可!
Windwos 系统同学需要注意:需要把 wkhtmltopdf 的 bin 执行文件路径添加到 PATH 变量中。
Windwos 系统同学需要注意:需要把 wkhtmltopdf 的 bin 执行文件路径添加到 PATH 变量中。
Windwos 系统同学需要注意:需要把 wkhtmltopdf 的 bin 执行文件路径添加到 PATH 变量中。
软件下载完成后我们还需要一个 Python 库:imgkit
。
也许会有同学问:为什么下载完软件还要下库?这两者有什么关系?这个库其实 相当于软件的包装器 ,简单理解有了这个库我们就可以 直接用代码调用软件,而不需要像平时那样需要自己去打开使用软件!
安装库:
pip install imgkit
将 html 转化为 png 图片,没看错就是只有一步!
imgkit.from_file(‘cet.html’, ‘cet.png’)
注:关于 imgkit 库
更多使用教程请看这里:https://pypi.org/project/imgkit/
我来看看看生成的图片是不是正常的,下图可以看到一个完成的网页截图就生成了!
用这个图片去发朋友圈别人可能会骂你 sb,截个这么大的图浪费别人流量!
图片太大,我们想办法把图片截一下,只留下中间结果信息!
图像处理当然要使用我们经典的pillow 库
安装:
pip install pillow
剪切图片三行代码搞定,这里我们将截好的图片保存为 cut_cet.png
# 剪切图片
img = Image.open('cet.png')
cropped = img.crop((310, 300, 700, 700)) # (left, upper, right, lower)
cropped.save("cut_cet.png")
看看截图后的效果,这样的图片才是一位合格的 Python 装逼工程师!
3. 打码
为什么猪哥会想要打码这个反男性的功能呢?原因在于猪哥这个测试账号也是从朋友圈看到的,所以告诫大家:一定要保护好自己的隐私,你永远不知道别人会那你的数据去干嘛!
好了回到代码中来,打码猪哥准备继续使用我们的 pillow 库
,另外还需要一个常用库numpy 库
,这两个库会经常一起使用。因为图片由许多个像素构成,而每个像素由 rgb 数值构成,所以就可以把一张图片转变为一个多维数组,所以numpy 库
就经常用到!
打码的原理就在于将需要打码区域的像素 rgb 值修改
我们来看看打码的技术实现,猪哥将打码的代码封装为一个方法,这是通用的,你可以用在其他地方!
这里只需要转入马赛克的大小和需要打码的坐标点就可以,我们来看看最终效果!
上图红色部分是猪哥后来画的,可以看到 准考证号已经被猪哥用 Python 画上邪恶的马赛克!
四、总结
今天的案例虽然简单,但是却让我们看到了 Python 的可玩性,将技术应用于生活,装逼就可以无处不在!
获取源码:关注微信公众号「裸睡的猪」回复:四六级查询