驾校答题小程序实战全过程【连载】——4.题目采集与测试

栏目: Node.js · 发布时间: 6年前

内容简介:由于没有数据,这次需要拿一些测试数据放到数据库。 这里想到本地采集,大家可以随意用任何后端语言,Python,PHP,Golang,Java,nodejs等等, 这里我就不用其他语言,使用接近JavaScript语法的,nodejs,采集后生成CSV文件。由于数据库,标题title是一个单独字段,这里先把title取出来。这里的数据[1]就是标题数据

由于没有数据,这次需要拿一些测试数据放到数据库。 这里想到本地采集,大家可以随意用任何后端语言,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)
驾校答题小程序实战全过程【连载】——4.题目采集与测试

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)
      });
驾校答题小程序实战全过程【连载】——4.题目采集与测试

2.png

这里的数据[1]就是标题数据

三、提取题目内容

驾校答题小程序实战全过程【连载】——4.题目采集与测试

3.png

四、完成导入

Bmob控制台导入CSV,导入后,效果如下。

驾校答题小程序实战全过程【连载】——4.题目采集与测试

4.png

小程序里面,我们测试下。

驾校答题小程序实战全过程【连载】——4.题目采集与测试

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,时间第一,并没有采集图片,如果正式上线,还需要采集图片并上传。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

趋势红利

趋势红利

刘润 / 文化发展出版社(原印刷工业出版社) / 2016-6-1 / 45.00

【编辑推荐】 1、国内顶尖的互联网转型专家,海尔、百度等知名企业战略顾问刘润送给传统企业的转型、创新“导航仪”,这个时代企业家的必修课 站在近200年商业全景图角度,刘润发现三种企业类型(产品型、渠道型、营销型),针对不同企业类型定制转型战略(找到自己的未来红利),方便 传统企业对号入座:不走错路就是节省时间,适合自己的最有效率。 本书内容还源自芬尼克兹、红领集团、名创优品、必要......一起来看看 《趋势红利》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具