駕校答題小程序實戰全過程【連載】——4.題目採集與測試

由於沒有數據,這次需要拿一些測試數據放到數據庫。 這裏想到本地採集,大家可以隨意用任何後端語言,Python,PHP,Golang,Java,nodejs等等, 這裏我就不用其他語言,使用接近JavaScript語法的,nodejs,採集後生成CSV文件。

主要用到三個庫:

  1. 網絡庫
  2. 解析庫
  3. 文件庫

這裏找到一個採集的地址:
http://www.jiakao.com/cnty/web/km1_tc_new.php?q=1

一、 選擇Table 打印這效果

let  table = $('table');

         table.each(function (index, item) {
          let  x = $(this).text();   
          console.log(x)  

二、提取標題

由於數據庫,標題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)
      });

這裏的數據[1]就是標題數據

三、提取題目內容

四、完成導入

Bmob控制檯導入CSV,導入後,效果如下。


小程序裏面,我們測試下。


放代碼

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,時間第一,並沒有採集圖片,如果正式上線,還需要採集圖片並上傳。

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