基于python实现网络课程秒刷系列二
最近看了公眾號的后臺數據,發現很多人對刷網絡學時的關注度比較高,所以最近利用工作之余的時間,又搗騰了一個網絡學習平臺,下面就介紹下整個流程,以下內容僅做技術交流。
首先,這是一個官方的網絡學習平臺,在網頁的左上角處有一個登錄窗口,通過刷新界面抓包可以獲取到驗證碼圖片的信息,如下圖所示。
由于此處驗證碼獲取有時,headers中帶了一個cookie值,因此在獲取驗證碼信息的時候,我們需要先獲得到cookie值。根據經驗,一般這個cookie值在網頁首次打開的時候就會得到,故我們清空瀏覽器的記錄,重新刷新該網頁,就獲得到了如下數據。
接著就是要知道登陸過程是否有加密。同樣的,我們在網站上真實的登錄一次,然后分析獲取的數據包,即可。如下所示。
從圖上可以看出,這邊的登錄并未做任何加密,賬號和密碼都是明文傳輸,這對后面的代碼模擬就更加簡單了。這邊稍微解釋下每個參數的意思:
name:賬號
pwd:密碼
czlx:操作類型(首字母直譯),這邊為登錄
code:驗證碼
登錄后點擊左側的年度必須,就可以看到需要完成的課程內容。
數據包信息如下:
簡單分析下該數據包,該請求為post請求,其中所帶的cookie值為上文所提到中的cookie為一致的,請求參數有id,pc,xyid,czlx這四個,其中前兩個參數固定不變,后面兩個參數會根據不同登錄的者的不同操作會存在變化,其中xyid為學員id,czlx為操作類型,此處所帶參數為bxkc,直譯為必修課程。
那么該請求返回值為json,該json就是所有必修課程的信息,用第一條數據展開解釋、其中bt代表標題,dzs代表點贊數,fbsj代表發布時間,id,jd代表進度,sc未知,xf代表學分,yhxf代表已獲學分,dzs代表點贊數,zylb代表資源類別。那么初步猜測,id是我們后面會用到的參數,即下文提到的courseID,而jd即可判斷該課程是否完成學習。
在上述的分析中,有個學員id我們并未提到是如何獲取到的,其實在登錄成功時,有個一個數據包被我們遺漏了。
該數據中返回的是一個網頁數據,該網頁數據里面帶有該登錄者的學員id,后期我們通過BeautifulSoup即可解析出該字段。
接著,我們打開一個視頻,認真的觀看完畢后,就會獲取到發送的數據包,具體如下所示。
此處需要發送的參數有8個,且發送的數據竟然跟在鏈接后,感覺寫法好奇怪。。。(對程序員的默默吐槽,寫的是啥玩意...)。其中kjkid和newmx我們還未獲取到,其余參數幾乎都能獲取到或猜測出大致意思。
因為這些參數是在視頻結束的時候帶上的,那么它們的獲取一定是在此之前通過某個請求得到的或者通過某種方式計算出來。根據參數命名的含義,我們可以大膽猜測為第一種,即通過某個請求獲得的,故我們繼續回過頭去尋找被我們遺漏的數據包信息。
在視頻打開時候,有個數據包被我們忽略了。如下圖所示。
通過該數據包返回的信息,我們可以獲取到kjkid和newmx。
以上全過程分析后,便可通過python模擬,代碼實現較為簡單,重在過程分析,故此處就不粘貼代碼。
對爬蟲有興趣的小伙伴,可以給我留言或私聊我,我們可以互相討論學習。
歡迎關注我個人的公眾號
總結
以上是生活随笔為你收集整理的基于python实现网络课程秒刷系列二的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java开发使用百度翻译api
- 下一篇: 2048+html源码之家,前端纯原生代