赞
踩
这学期就想把习乐题库刷空,一直没时间弄,期末来了,课少了,搞起来~
习乐好像是一个一个学长写的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的框架,吐血。。。。。
溜了溜了还有计组没复习的,明天考试,刺激~~~
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。