昨天有很多同学在朋友圈秀六级成绩
一个个都如 (sang) 此(jin)优 (tian) 秀(liang)
当然也有悲催的哥们
对于上面这位老弟
我只能说: 骚呢, 兄弟
这种事都能赶上, 必须点赞
一, 需求分析
在刷朋友圈的时候, 看到很多同学截图不规整啊(没错, 猪哥处女座), 有些准考证号还没打马赛克, 于是猪哥就在想能不能用 Python 生个四六级成绩截图出来, 最好还能自动打码, 这样岂不是可以直接发朋友圈, 装逼一步到位!(别人在秀成绩, 你不光可以秀成绩, 还可以秀 Python)
二, 功能设计
很多同学会模仿别人代码, 而自己却不知道去如何做一些小项目, 其实问题就是在于: 你不知从何下手!
作为开发人员在工作中都是接需求, 所以自己做项目的第一步就是: 搞清楚自己要做什么(功能), 然后再去量化功能, 分步实现!
接下来我们就来看看今天要做一个什么有趣的东西吧!
查成绩: 首先我们通过 requests 库去学信网查询成绩
生成截图: 查完成绩之后就直接生成截图, 截图最好只有中奖有效信息部分
打码: 对于准考证号进行打码
三, 技术实现
确定了要做的功能并量化细分完毕后, 我们就可以开始敲代码实现了, 这里就按照之前细分的步骤一步一步实现就好了!
1. 查询四六级成绩
首先我们需要找到四六级的查询入口, 这里首选 学信网: https://www.chsi.com.cn/cet/index.jsp
然后我们调出调试窗口, 输入准考证号和姓名. 记得勾选左上角的 Preserve log
然后我们就可以在 Network 看到第一个请求就是获取四六级结果的请求
拿到 URL 我们就可以开始使用 requests 库模拟请求啦, 非常简单的一个 post 方法!
来看看返回的结果, 是一个 html 网页!
2. 使网页生成图片
这里我们会使用到一个软件: wkhtmltopdf, 注意这是一个软件而不是 python 库, 我们先要安装这个软件!
官网下载地址: https://wkhtmltopdf.org/downloads.html , 注意这个网站下载需要打开 VPN, 不然下载超级慢!
猪哥事先已经把他们都下载放在百度网盘里: wkhtmltopdf 软件下载链接: https://pan.baidu.com/s/11VOomkNch7C9m8lqlRaNAg 密码: 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 的可玩性, 将技术应用于生活, 装逼就可以无处不在!
来源: https://www.cnblogs.com/pig66/p/11395814.html