1. 程式人生 > >四六級成績還可以這樣查?Python助你裝B一步到位!!!

四六級成績還可以這樣查?Python助你裝B一步到位!!!

昨天有很多同學在朋友圈秀六級成績
一個個都如(sang)此(jin)優(tian)秀(liang)

當然也有悲催的哥們

對於上面這位老弟
我只能說:騷呢,兄弟
這種事都能趕上,必須點贊

一、需求分析

在刷朋友圈的時候,看到很多同學截圖不規整啊(沒錯,豬哥處女座),有些准考證號還沒打馬賽克,於是豬哥就在想能不能用Python生個四六級成績截圖出來,最好還能自動打碼,這樣豈不是可以直接發朋友圈,裝逼一步到位!(別人在秀成績,你不光可以秀成績,還可以秀Python)

二、功能設計

很多同學會模仿別人程式碼,而自己卻不知道去如何做一些小專案,其實問題就是在於:你不知從何下手!

作為開發人員在工作中都是接需求,所以自己做專案的第一步就是:搞清楚自己要做什麼(功能),然後再去量化功能,分步實現!

接下來我們就來看看今天要做一個什麼有趣的東西吧!

  1. 查成績:首先我們通過requests庫去學信網查詢成績
  2. 生成截圖:查完成績之後就直接生成截圖,截圖最好只有中獎有效資訊部分
  3. 打碼:對於准考證號進行打碼

三、技術實現

確定了要做的功能並量化細分完畢後,我們就可以開始敲程式碼實現了,這裡就按照之前細分的步驟一步一步實現就好了!

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的可玩性,將技術應用於生活,裝逼就可以無處不在!

獲取原始碼:關注微信公眾號「裸睡的豬」 回覆: 四六級查詢