對習樂app的某課程的所有題目爬取

這學期就想把習樂題庫刷空,一直沒時間弄,期末來了,課少了,搞起來~

習樂好像是一個一個學長寫的app,但是對不住了,增加了點垃圾數據,23333

思路:
        1、手機或模擬器抓包,分析提交自測數據包、查看試卷數據包。

        2、模擬上面的數據包。

        3、清洗數據,得到想要的信息入庫。

Fiddler抓手機/模擬器數據包,分析數據包基本數據包

Fiddler 抓手機包,網上有教程,我就不一一闡述了。

(一)、抓取分析自測數據包

手機點擊,然後查看Fiddler,直接上抓到的數據包。

數據頭:
POST http://193.112.190.119/MyCollege/getKssjByAuto.app HTTP/1.1
accept: application/json; charset=UTF-8
charset: utf - 8
Content-Type: application/json; charset=UTF-8
Content-Length: 140
Host: 193.112.190.119
Connection: Keep-Alive
Accept-Encoding: gzip
User-Agent: okhttp/3.6.0

Body:
{"course":"毛澤東思想和中國特色社會主義理論體系概論(二)","courseid":104848,"zhang":"第一章","stdid":"***你的學號***"}

需要傳遞的參數(json格式):

{

   course:課程的名字

   courseid:課程的Id,

   zhang:章節名字

   stdid:學號

}

 

Fiddler截圖如下

          

顯然 前面兩個和課程相關,不需要改。後面一個是學號,一樣的填上去,post提交,json 格式。

然後會返回json數據的數據:題目信息和關於本次自測的一些信息。

然後發現沒有Cokkies居然就可以提交,而且還只要學號???

學長偷懶了~,也方便了我...(這裏我傻了,後面居然用我自己的學號跑完數據,應該用別人的學號的,反正也不知道,血虧)

管理員看到就看到把,無所謂,反正數據搞到手了,再說,我只是寫自測題目。

下面是返回的json數據:

這裏我們知道找到本次自測的kssjid就好,代表本次測試的唯一編號。

後續的提交自測和查看題目答案都需要這個ID ,也只需要這個ID,不需要Cookies。看到題目數據不要着急清洗,因爲後面查看答案會有所有我們想要的。

特別提醒:kssjtmid並不是題目唯一的標識符,而是所有用戶寫題目的數量,因爲這個參數調試數據庫好久,總是找不到原因出在哪裏,然後發現是題目提交的順序.......

(二)、模擬提交試卷

同樣分析數據包:

數據包頭部:
POST http://193.112.190.119/MyCollege/kssjTijiao.app HTTP/1.1
accept: application/json; charset=UTF-8
charset: utf - 8
Content-Type: application/json; charset=UTF-8
Content-Length: 30
Host: 193.112.190.119
Connection: Keep-Alive
Accept-Encoding: gzip
User-Agent: okhttp/3.6.0

傳送的數據:
    {"kssjid":*****,"kssjtms":[]}

kssjid:自測試卷的Id,利用我們前面獲得的數據

kssjtms: 你的答案,可以爲空,就是直接提交答案。

返回的數據:
如上。

(三)、查看提交的試卷。和清洗答案

POST請求:
POST http://193.112.190.119/MyCollege/getKssjById.app HTTP/1.1
accept: application/json; charset=UTF-8
charset: utf - 8
Content-Type: application/json; charset=UTF-8
Content-Length: 17
Host: 193.112.190.119
Connection: Keep-Alive
Accept-Encoding: gzip
User-Agent: okhttp/3.6.0

參數:
{"kssjid":****}

同樣:我們只需要傳遞kssjid這個參數,返回一個jsong格式的數據,裏面有題目、答案等我們想要的信息,如下圖;

清洗數據。

大概介紹下這些 參數。

有用的數據在data裏面

Kssjid:對應測試唯一的ID

Kssjtms:就是所有的題目,遍歷一遍。

       Kssjtms下面的tjdaans就是選項和問題。

對於單選多選都是

bzflag=True表示這個答案是正確的,選項順序會變,但是答案總共不回變,

對於判斷題:

bzdaanb=True 表示這個題目是正確,否則是錯誤。

基本遍歷一遍就能找到題目和對應的答案。然後保存入庫就好了。

還有個需要注意的就是,對於題庫,我們只有不斷提交數據,然後和自己的數據庫對比,發現新的再入庫。

對比的就是題目的ID,除了個別題目,後面多了個。也當成一個新題目,其他的還好。

所以我順帶記錄了入庫情況,前面幾次沒記錄。

第三次到最後,前面代表命中率新題率,後面代表獲得的題目數量(開始猜測有4K道題目,只有3200+題目,差了800,...)。

496/8400

104/8400

28/8400

8/8400

3/8400

2/8400

3/8400

0/8400

0/8400

0/8400

0/8400

然後我就停止爬蟲了,猜測10題以內沒入庫(除非我臉是真的黑..........)

 

四、題外話

APP服務器的IP:193.112.190.119 ,是騰訊雲服務器。

剛開始還怕學生服務器承受不了,本來打算多進程爬取,後來才發現我這纔多大數據量,然後單線程跑。

注意點(awsl):

      1、猜錯參數作用,浪費2個小時,才發現。數據庫都刪了幾次。

      2、由於開始想的太多,學了Scrapy框架手癢,覺得好用,能快速爬取信息,還有多線程存儲數據,直到快寫完了,發現沒必要用Scrapy,最後連線程池也沒用,就是個普通的爬蟲,不過掛着個Scrapy的框架,吐血。。。。。

 

溜了溜了還有計組沒複習的,明天考試,刺激~~~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章