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

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

内容简介:由于没有数据,这次需要拿一些测试数据放到数据库。 这里想到本地采集,大家可以随意用任何后端语言,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,时间第一,并没有采集图片,如果正式上线,还需要采集图片并上传。


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

查看所有标签

猜你喜欢:

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

Learn Python the Hard Way

Learn Python the Hard Way

Zed A. Shaw / Addison-Wesley Professional / 2013-10-11 / USD 39.99

Master Python and become a programmer-even if you never thought you could! This breakthrough book and CD can help practically anyone get started in programming. It's called "The Hard Way," but it's re......一起来看看 《Learn Python the Hard Way》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

随机密码生成器
随机密码生成器

多种字符组合密码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码