看到有很多同學在朋友圈秀六級成績
一個個都如(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。
也許會有同學問:爲什麼下載完軟件還要下庫?這兩者有什麼關係?這個庫其實相當於軟件的包裝器,簡單理解有了這個庫我們就可以直接用代碼調用軟件,而不需要像平時那樣需要自己去打開使用軟件!
安裝庫:
如果你對python感興趣,我這有個學習Python基地,裏面有很多學習資料,感興趣的+Q羣:688244617
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畫上邪惡的馬賽克!
你學會了嘛?