对习乐app的某课程的所有题目爬取

2023-11-13

这学期就想把习乐题库刷空,一直没时间弄,期末来了,课少了,搞起来~

习乐好像是一个一个学长写的app,但是对不住了,增加了点垃圾数据,23333

思路:
        1、手机或模拟器抓包,分析提交自测数据包、查看试卷数据包。

        2、模拟上面的数据包。

        3、清洗数据,得到想要的信息入库。

Fiddler抓手机/模拟器数据包,分析数据包基本数据包

Fiddler 抓手机包,网上有教程,我就不一一阐述了。

(一)、抓取分析自测数据包

手机点击,然后查看Fiddler,直接上抓到的数据包。

数据头:
POST http://193.112.190.119/MyCollege/getKssjByAuto.app HTTP/1.1
accept: application/json; charset=UTF-8
charset: utf - 8
Content-Type: application/json; charset=UTF-8
Content-Length: 140
Host: 193.112.190.119
Connection: Keep-Alive
Accept-Encoding: gzip
User-Agent: okhttp/3.6.0

Body:
{"course":"毛泽东思想和中国特色社会主义理论体系概论(二)","courseid":104848,"zhang":"第一章","stdid":"***你的学号***"}

需要传递的参数(json格式):

{

   course:课程的名字

   courseid:课程的Id,

   zhang:章节名字

   stdid:学号

}

 

Fiddler截图如下

          

显然 前面两个和课程相关,不需要改。后面一个是学号,一样的填上去,post提交,json 格式。

然后会返回json数据的数据:题目信息和关于本次自测的一些信息。

然后发现没有Cokkies居然就可以提交,而且还只要学号???

学长偷懒了~,也方便了我...(这里我傻了,后面居然用我自己的学号跑完数据,应该用别人的学号的,反正也不知道,血亏)

管理员看到就看到把,无所谓,反正数据搞到手了,再说,我只是写自测题目。

下面是返回的json数据:

这里我们知道找到本次自测的kssjid就好,代表本次测试的唯一编号。

后续的提交自测和查看题目答案都需要这个ID ,也只需要这个ID,不需要Cookies。看到题目数据不要着急清洗,因为后面查看答案会有所有我们想要的。

特别提醒:kssjtmid并不是题目唯一的标识符,而是所有用户写题目的数量,因为这个参数调试数据库好久,总是找不到原因出在哪里,然后发现是题目提交的顺序.......

(二)、模拟提交试卷

同样分析数据包:

数据包头部:
POST http://193.112.190.119/MyCollege/kssjTijiao.app HTTP/1.1
accept: application/json; charset=UTF-8
charset: utf - 8
Content-Type: application/json; charset=UTF-8
Content-Length: 30
Host: 193.112.190.119
Connection: Keep-Alive
Accept-Encoding: gzip
User-Agent: okhttp/3.6.0

传送的数据:
    {"kssjid":*****,"kssjtms":[]}

kssjid:自测试卷的Id,利用我们前面获得的数据

kssjtms: 你的答案,可以为空,就是直接提交答案。

返回的数据:
如上。

(三)、查看提交的试卷。和清洗答案

POST请求:
POST http://193.112.190.119/MyCollege/getKssjById.app HTTP/1.1
accept: application/json; charset=UTF-8
charset: utf - 8
Content-Type: application/json; charset=UTF-8
Content-Length: 17
Host: 193.112.190.119
Connection: Keep-Alive
Accept-Encoding: gzip
User-Agent: okhttp/3.6.0

参数:
{"kssjid":****}

同样:我们只需要传递kssjid这个参数,返回一个jsong格式的数据,里面有题目、答案等我们想要的信息,如下图;

清洗数据。

大概介绍下这些 参数。

有用的数据在data里面

Kssjid:对应测试唯一的ID

Kssjtms:就是所有的题目,遍历一遍。

       Kssjtms下面的tjdaans就是选项和问题。

对于单选多选都是

bzflag=True表示这个答案是正确的,选项顺序会变,但是答案总共不回变,

对于判断题:

bzdaanb=True 表示这个题目是正确,否则是错误。

基本遍历一遍就能找到题目和对应的答案。然后保存入库就好了。

还有个需要注意的就是,对于题库,我们只有不断提交数据,然后和自己的数据库对比,发现新的再入库。

对比的就是题目的ID,除了个别题目,后面多了个。也当成一个新题目,其他的还好。

所以我顺带记录了入库情况,前面几次没记录。

第三次到最后,前面代表命中率新题率,后面代表获得的题目数量(开始猜测有4K道题目,只有3200+题目,差了800,...)。

496/8400

104/8400

28/8400

8/8400

3/8400

2/8400

3/8400

0/8400

0/8400

0/8400

0/8400

然后我就停止爬虫了,猜测10题以内没入库(除非我脸是真的黑..........)

 

四、题外话

APP服务器的IP:193.112.190.119 ,是腾讯云服务器。

刚开始还怕学生服务器承受不了,本来打算多进程爬取,后来才发现我这才多大数据量,然后单线程跑。

注意点(awsl):

      1、猜错参数作用,浪费2个小时,才发现。数据库都删了几次。

      2、由于开始想的太多,学了Scrapy框架手痒,觉得好用,能快速爬取信息,还有多线程存储数据,直到快写完了,发现没必要用Scrapy,最后连线程池也没用,就是个普通的爬虫,不过挂着个Scrapy的框架,吐血。。。。。

 

溜了溜了还有计组没复习的,明天考试,刺激~~~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对习乐app的某课程的所有题目爬取 的相关文章

随机推荐

  • 电子信息工程考研:12大专业方向解读

    导读 模式识别与智能系统专业解读 通信与信息系统专业解读 电路与系统专业解读 信号与信息处理专业解读 电子与通信工程专业解读 电力电子与电力传动专业解读 光电信息工程专业解读 物理电子学专业解读 控制工程专业解读 集成电路工程专业解读 精密
  • mysql row()函数_详解mysql数据库binlog三种模式的区别(row,statement,mixed)

    概述 Mysql binlog日志有三种格式 分别为Statement MiXED 以及ROW 这三种格式之间有什么区别呢 下面先介绍下各自的优缺点 ROW 日志中会记录成每一行数据被修改的形式 然后在slave端再对相同的数据进行修改 只
  • 5.12 树和森林的遍历

    一 树的遍历 1 先根遍历 根左右 深度优先遍历 若树非空 先访问根节点 再依次对每棵子树进行先根遍历 树的先根遍历 void PreOrder TreeNode R if R NULL visit R 访问根结点 while R还有下一棵
  • 动态图分类:DySAT算法及其Python实现

    动态图分类 DySAT算法及其Python实现 动态图分类是计算机视觉领域的一个重要任务 其目标是对动态图像序列进行分类 DySAT算法是一种基于结构Self Attention和时域Self Attention的深度学习模型 用于解决动态
  • 在阿里云里面服务器怎么样可以更好的链接数据库

    环境 阿里云ubuntu服务器 阿里云RDS数据库 问题 如何在阿里云服务器的终端使用shell命令连接RDS云数据库 解决方法 1 阿里云服务器安装MySQL sudo apt get install mysql server 如果出现u
  • 非标准包 game.rgss3a 的打开方法

    写在前面 最近在玩 RPG 游戏 想拆一个 Game rgss3a 包 在网上找了很久的拆包方法 感觉写的比较凌乱 我来给大家整理一下吧 不过我本人的技术能力也很差 不确定说的是不是对的 就当是给大家提供几个方法 大家都自己试一下吧 先说
  • 近源渗透学习

    一 近源渗透 近源渗透测试是网络空间安全领域逐渐兴起的一种新的安全评估手段 它是一种集常规网络攻防 物理接近 社会工程学及无线电通信攻防等能力于一体的高规格网络安全评估行动 网络安全评估小组在签订渗透测试授权协议后 通过乔装 社工等方式实地
  • git 常用命令---修改Git默认编辑器为vim

    1 配置 git config global user email you example com 配置git用户名 git config global user name Your Name 配置git邮件 git config glob
  • C++类使用未定义类型 use undefined class

    a h file include
  • [论文笔记]AutoAssign 阅读笔记

    AutoAssign 阅读笔记 AutoAssign Differentiable Label Assignment for Dense Object Detection 摘要 1 引言 2 相关工作 固定标签分配 Fixed Label
  • Vue.js 生命周期函数

    系列文章目录 Vue js基础简答题 文章目录 系列文章目录 前言 一 创建阶段 1 beforeCreate 2 created 3 beforeMount 4 mounted 二 运行阶段 1 beforeUpdate 2 update
  • 字符设备驱动详解(主次设备号、注册/卸载字符设备驱动、创建设备节点、地址映射)

    1 主次设备号 1 主次设备号是内核用来索引设备的 每个主次设备号在内核中都是唯一的 每个注册的设备都有一个分配的主次设备号 2 同一个主设备号可以有多个从设备号 主设备是对应的驱动程序 次设备号对应设备文件所指的设备 一个Soc可能接同样
  • Odoo进销存(采购、销售、仓库)入门教程 - 上

    运行环境 Ubuntu14 04 Odoo8 0 作者 苏州 微尘 0 前言 Odoo OpenERP 作为一款优秀的开源ERP软件 开发历史已有10年之久 随着系统的发展成熟 已有越来越多的公司借助Odoo管理日常业务的方方面面 本文以一
  • undo表空间故障特殊恢复(一)

    author skate time 2010 09 09 undo表空间故障特殊恢复 一 这个测试的是instance recover 单实例里就是crash recovery 的恢复不需要故障undo里的数据 一般的情况instance
  • python修改字典内key对应的值的代码

    下面代码段是关于python修改字典内key对应的值的代码 希望对码农有用 d2 spam 2 ham 1 eggs 3 make a dictionary print d2 order is scrambled d2 ham grill
  • python爬虫网页编码问题——网页gbk编码

    爬虫的时候遇到一个网页的编码是有问题 添加了这句 没问题了 20210124 21 34 response encoding gbk
  • 基于Linux开发python项目

    在某些公司要求中 我们不会直接在Windows系统上做项目的开发 有时候会采用在linux系统上开发 而这分为两种情况 1 直接在本地搭建虚拟机 虚拟机上面装centos镜像 项目运行在本地虚拟机上 大部分原因都是项目的某些依赖包在Wind
  • 4 业务分析师

    在每个软件项目中 都有人在显式或隐式地扮演业务分析师 BA 的角色 业务分析师是能够在组织中促进变化的人 他们通过定义需求和向干系人推荐有价值的解决方案来促进这些变化 分析师获取和分析他人的观点 将收集到的信息转换为需求规范说明 并于其他干
  • 如何从无序链表中移除重复项--Java版

    题目描述 给定一个没有排序的链表 去掉其重复项 并保留原顺序 如链表1 gt 3 gt 1 gt 5 gt 5 gt 7 去掉重复项变为1 gt 3 gt 5 gt 7 方法一 顺序删除 思路 通过双重循环直接在链表上执行删除操作 外层循环
  • 对习乐app的某课程的所有题目爬取

    这学期就想把习乐题库刷空 一直没时间弄 期末来了 课少了 搞起来 习乐好像是一个一个学长写的app 但是对不住了 增加了点垃圾数据 23333 思路 1 手机或模拟器抓包 分析提交自测数据包 查看试卷数据包 2 模拟上面的数据包 3 清洗数