駕校答題小程式實戰全過程【連載】——4.題目採集與測試
由於沒有資料,這次需要拿一些測試資料放到資料庫。 這裡想到本地採集,大家可以隨意用任何後端語言,Python,PHP,Golang,Java,nodejs等等, 這裡我就不用其他語言,使用接近JavaScript語法的,nodejs,採集後生成CSV檔案。
主要用到三個庫:
- 網路庫
- 解析庫
- 檔案庫
這裡找到一個採集的地址:
ofollow,noindex">http://www.jiakao.com/cnty/web/km1_tc_new.php?q=1一、 選擇Table 列印這效果
lettable = $('table'); table.each(function (index, item) { letx = $(this).text(); console.log(x)

1.png
二、提取標題
由於資料庫,標題title是一個單獨欄位,這裡先把title取出來。
let table = $('table'); table.each(function (index, item) { let x = $(this).find("tr>td").eq(0).text(); let t = x.split('\n\t'); console.log(t) });

2.png
這裡的資料[1]就是標題資料
三、提取題目內容

3.png
四、完成匯入
Bmob控制檯匯入CSV,匯入後,效果如下。

4.png
小程式裡面,我們測試下。

5.png
放程式碼
let http = require('http'); let fs = require('fs'); let cheerio = require('cheerio'); let request = require('request'); let iconv = require('iconv-lite'); let i = 0; let url = "http://www.jiakao.com/cnty/web/km1_tc_new.php?q=1"; //初始url function fetchPage (x) {//封裝了一層函式 startRequest(x); } function startRequest (x) { //採用http模組向伺服器發起一次get請求 http.get(x, function (res) { let html = '';//用來儲存請求網頁的整個html內容 let titles = []; res.setEncoding('binary'); //防止中文亂碼 //監聽data事件,每次取一塊資料 res.on('data', function (chunk) { html += chunk; }); //監聽end事件,如果整個網頁內容的html都獲取完畢,就執行回撥函式 res.on('end', function () { html = iconv.decode(html, 'gb2312'); let $ = cheerio.load(html); //採用cheerio模組解析html let table = $('table'); console.log('help,choseList,title,video,type,bType,bModels,bSubjects,pic') table.each(function (index, item) { let t; let d; let tArr = []; let choseList = [] //{""item"":""6個月""} $(this).find("tr>td").each(function (i, items) { // t = $(this).eq(0).text().split('\n\t'); t = $(this).text().split('\n\t'); if (i == 0) { tArr.push(t[1]) } d = $(this).text().trim() if (i > 0 && i < 6) { if (d.indexOf('A') != -1 || d.indexOf('B') != -1 || d.indexOf('C') != -1 || d.indexOf('D') != -1) { let answerStr, answerArr; // 獲取正確答案 let okStr = $(this).parent().attr('onclick') if (okStr != undefined) { answerStr = okStr.substr(25, 3) answerArr = answerStr.split(',') } d = d.split('、'); if (answerArr[0] == answerArr[1]) { choseList.push({ "\"isChose\"": true, "\"item\"": "\"" + d[1] + "\"" }) } else { choseList.push({ "\"item\"": "\"" + d[1] + "\"" }) } } } }) console.log(`,"${JSON.stringify(choseList)}",${tArr},,1,413405afba,1,1,`) }); }) }).on('error', function (err) { console.log(err); }); } fetchPage(url);//主程式開始執行
五、總結:
Bmob資料庫支援CSV匯入, 我們把採集到的資料輸出為一個CSV即可,然後後臺點選匯入,採集到資料後,進行處理,分四步:
拿到標題
拿到結果
分析出正確答案
整理資料格式匯出CSV
由於這裡100題只是為了做Demo,時間第一,並沒有採集圖片,如果正式上線,還需要採集圖片並上傳。