自己動手寫一個教務處查成績系統(tǒng)

學了大半年 Node.JS 不知道學了點什么罢杉,眼看著這學期就快要過去了,即將迎來期末考試的審判贡歧,心慌滩租。寫幾行代碼靜靜,所以這幾天用 Node 寫了個查成績系統(tǒng)利朵。等期末考完試就能用自己的程序查自己成績看看掛了幾科律想,想想也是很刺激的。

查成績說到底還是爬蟲哗咆,寫爬蟲有個趁手的工具還是很方便的蜘欲,就是這兩個:

// 用來發(fā)送http請求
const request = require('request');
// 用來用 jquery 語法解析 html 格式文件
const cheerio = require('cheerio');

現(xiàn)在可以發(fā)送 http 請求了,那還需要來看一下教務處的路由晌柬。

通過觀察姥份,首先要登錄一下郭脂,登錄還需要填個二維碼。通過觀察澈歉,驗證碼請求路徑就是這個:

/validateCodeAction.do?random="+Math.random();

驗證碼這個東西展鸡,請求它的時候它還會返回一個 cookie 所以需要把這個 cookie 存一下:

var cookie = res.headers['set-cookie'];

然后還有表單內(nèi)容:

用戶名:zjh
密碼:mm
驗證碼:v_yzm

然后帶著 cookiePOST 登錄表單,就可以登錄成功啦埃难,沒有 cookie 登錄的話會返回服務器繁忙莹弊。登錄失敗涡尘!

最后的請求參數(shù):

let opts = {
    // 登錄路徑
    url: "http://教務處網(wǎng)址/loginAction.do",
    headers: {
        'User-Agent': `Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36`,
        Cookie: cookie, //這里是請求二維碼返回的cookie,(重點)  
    },
    encoding: null,  // 關鍵代碼
    method: 'POST',
    // 攜帶 cookie 再 POST 表單
    form: {
        zjh: username,  // 學號
        mm : password,  // 密碼
        v_yzm : yzm     // 驗證碼
    },
};

哦忍弛,對了。登錄路徑是這個:

/loginAction.do

然后就登錄成功啦考抄,經(jīng)過一頓探索發(fā)現(xiàn)细疚。得知,查詢成績頁面是這個路由:

/gradeLnAllAction.do?type=ln&oper=fa

然后通過 request 請求這個路徑川梅,在返回的 body 中得到 html 文件疯兼。

這里有一個問題,就是中文亂碼問題贫途,這里可以通過設置 request 請求的 encoding 參數(shù)設置為 null 返回二進制文件吧彪,再通過

const gbk = require('GBK');

這個模塊,將二進制文件轉(zhuǎn)為 GBK 編碼丢早。

var data = gbk.toString('utf-8',body1);

然后就可以愉快的從文件中獲取成績信息了姨裸。先用 cheerio 模塊加載 html 文件。

var $ = cheerio.load('data');

然后用 jquery 語法分析

var temp = [];
var data = {
    score:[],
};
$(".odd td").each(function(index,el){
    temp[index] = $(el).text().trim();
    data['score'][index] = temp[index];
})

分析網(wǎng)頁源碼發(fā)現(xiàn)怨酝,成績信息儲存在 .odd 下的 td 標簽中啦扬,遍歷 td 標簽,trim 方法去掉空格回車將結(jié)果儲存在 data 對象的 score 數(shù)組中凫碌。

res.render('score',data);

返回 data 數(shù)據(jù)。

好啦胃榕,后臺內(nèi)容基本就寫完盛险。前端接收數(shù)據(jù)顯示即可。

很多學校的教務處可能都是類似的勋又,看了這篇文章相信每個人都可以自己寫一個專屬的查成績系統(tǒng)苦掘,或者是女朋友私人訂制版

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末楔壤,一起剝皮案震驚了整個濱河市鹤啡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蹲嚣,老刑警劉巖递瑰,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件祟牲,死亡現(xiàn)場離奇詭異,居然都是意外死亡抖部,警方通過查閱死者的電腦和手機说贝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來慎颗,“玉大人乡恕,你說我怎么就攤上這事「┪” “怎么了傲宜?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長夫啊。 經(jīng)常有香客問我函卒,道長,這世上最難降的妖魔是什么涮母? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任谆趾,我火速辦了婚禮,結(jié)果婚禮上叛本,老公的妹妹穿的比我還像新娘沪蓬。我一直安慰自己,他們只是感情好来候,可當我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布跷叉。 她就那樣靜靜地躺著,像睡著了一般营搅。 火紅的嫁衣襯著肌膚如雪云挟。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天转质,我揣著相機與錄音园欣,去河邊找鬼。 笑死休蟹,一個胖子當著我的面吹牛沸枯,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播赂弓,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼绑榴,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了盈魁?” 一聲冷哼從身側(cè)響起翔怎,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后赤套,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體飘痛,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年于毙,在試婚紗的時候發(fā)現(xiàn)自己被綠了敦冬。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡唯沮,死狀恐怖脖旱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情介蛉,我是刑警寧澤萌庆,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站币旧,受9級特大地震影響践险,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜吹菱,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一巍虫、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧鳍刷,春花似錦占遥、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至尤揣,卻和暖如春搔啊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背北戏。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工负芋, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人嗜愈。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓示罗,卻偏偏與公主長得像,于是被迫代替她去往敵國和親芝硬。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內(nèi)容