#!/usr/bin/env python
# encoding: utf-8
'''
@author: JHC
@license: None
@contact: JHC000abc@gmail.com
@file: ttt.py
@time: 2022/4/22 23:27
@desc:替换self.uuid就能把题和答案写入mysql数据库uuid在cookies里
'''
import json
import requests
import pymysql.cursors
import sys
from tqdm import tqdmclass Spider():def __init__(self):self.con = pymysql.connect(host='localhost', port=3306, user='root', password='123456', db='questionsbank',charset='utf8', cursorclass=pymysql.cursors.DictCursor)# self.uuid="V8qYDjej"self.uuid = "Vj1vy1A7"self.courseId = "10464858"self.randomExerciseStyle = "0"self.isFirst = Trueself.params = (('courseId', self.courseId),('randomExerciseStyle',self.randomExerciseStyle),('isFirst',self.isFirst),('uuid',self.uuid))self.url_queryAnswerSheet = 'https://hike-examstu.zhihuishu.com/zhsathome/randomExercise/queryAnswerSheet'self.url_queryRandomExerciseDetail = 'https://hike-examstu.zhihuishu.com/zhsathome/randomExercise/queryRandomExerciseDetail'def get_exerciseId_list(self):'''获取练习所有题id'''res = requests.get(url=self.url_queryAnswerSheet,params=self.params)exerciseId_list = [i["exerciseId"] for i in res.json()["rt"]["lists"]]return exerciseId_listdef get_content(self):'''获取题目内容'''exerciseId_list = self.get_exerciseId_list()INDEX = 1for questionId in tqdm(exerciseId_list):params = (('courseId', self.courseId),('questionId', questionId),('times', '2'),('randomExerciseStyle', self.randomExerciseStyle),('uuid', self.uuid),)response = requests.get(url=self.url_queryRandomExerciseDetail,params=params)if response.json()["rt"] is not None:randomExerciseSortId = response.json()["rt"]["randomAnswerDetailDto"]["randomExerciseId"]answerList = [i["id"] for i in response.json()["rt"]["optionList"]]questionType = response.json()["rt"]["questionName"]if questionType == '单选题':answer = self.get_answer_radio(randomExerciseSortId, answerList)self.radio(response, INDEX,questionType,answer)elif questionType == '多选题':answer = self.get_answer_multi(randomExerciseSortId,answerList)self.multi(response, INDEX, questionType,answer)elif questionType == '判断题':answer = self.get_answer_judge(randomExerciseSortId)self.judge(response, INDEX,questionType,answer)else:print('异常')INDEX += 1else:print("异常题号为{}".format(INDEX))INDEX += 1def judge(self,response, INDEX,questionType,answer):'''判断'''key1, key2, key3, key4, key5, key6 = self.set_opt(response)id, title, type = self.process_data(INDEX, questionType, response)self.insert_data(id=id,title=title,type=type,key1=key1,key2=key2,key3=key3,key4=key4,key5=key5,key6=key6,answer=answer)def multi(self,response,INDEX,questionType,answer):'''多选'''key1, key2, key3, key4, key5, key6 = self.set_opt(response)id, title, type = self.process_data(INDEX, questionType, response)self.insert_data(id=id, title=title, type=type,key1=key1,key2=key2,key3=key3,key4=key4,key5=key5,key6=key6,answer=answer)def radio(self,response,INDEX,questionType,answer):'''单选'''key1, key2, key3, key4, key5, key6 = self.set_opt(response)id, title, type = self.process_data(INDEX, questionType, response)self.insert_data(id=id, title=title, type=type, key1=key1, key2=key2, key3=key3, key4=key4, key5=key5, key6=key6,answer=answer)def process_data(self, INDEX, questionType, response):'''删除题目中的垃圾字符'''content = response.json()["rt"]["content"]id = INDEXtitle = str(content).replace("&nbsp;","").replace("<p>","").replace("</p>","").replace("<br>","")type = questionTypereturn id, title, typedef set_opt(self,response):'''拼接选项,纯为了好看'''optionList = response.json()["rt"]["optionList"]flag = 1key1, key2, key3, key4, key5, key6 = None,None,None,None,None,Nonefor option in optionList:option_content = option["content"].replace("&nbsp;","").replace("<p>","").replace("</p>","")if flag == 1:single = 'A. 'key1 = single + option_contentif flag == 2:single = 'B. 'key2 = single + option_contentif flag == 3:single = 'C. 'key3 = single + option_contentif flag == 4:single = 'D. 'key4 = single + option_contentif flag == 5:single = 'E. 'key5 = single + option_contentif flag == 6:single = 'F. 'key6 = single + option_contentflag += 1return key1,key2,key3,key4,key5,key6def insert_data(self,id,title,type,key1=None,key2=None,key3=None,key4=None,key5=None,key6=None,answer=None):'''写入数据到mysql'''try:with self.con.cursor() as cur:sql = 'INSERT INTO xingce (id, title,key1,key2,key3,key4,key5,key6,type,answer) VALUES (%s,%s, %s, %s, %s, %s,%s,%s,%s,%s)'cur.execute(sql, (id,title,key1,key2,key3,key4,key5,key6,type,answer))self.con.commit()except :self.con.rollback()def get_answer_judge(self,randomExerciseSortId):'''判断题答案获取'''for key in range(0,10):url = "https://hike-examstu.zhihuishu.com/zhsathome/randomExercise/submitAnswer?uuid={}".format(self.uuid)headers = {"Content-Type": "application/json",}data = {"data": {"answerContent": key, "fileList": [], "isReview": True, "randomExerciseSortId": randomExerciseSortId,"courseId": "10464858"}}res = requests.post(url, headers=headers, data=json.dumps(data))if res.json()["rt"] == True:if key == 0:return "B"else:return "A"else:passdef get_answer_radio(self, randomExerciseSortId,answerList):'''单选题,答案获取'''for key in answerList:url = "https://hike-examstu.zhihuishu.com/zhsathome/randomExercise/submitAnswer?uuid={}".format(self.uuid)headers = {"Content-Type": "application/json",}data = {"data": {"answerContent": key, "fileList": [], "isReview": True,"randomExerciseSortId": randomExerciseSortId,"courseId": "10464858"}}res = requests.post(url, headers=headers, data=json.dumps(data))if res.json()["rt"] == True:if answerList.index(key) == 0:return "A"elif answerList.index(key) == 1:return "B"elif answerList.index(key) == 2:return "C"elif answerList.index(key) == 3:return "D"elif answerList.index(key) == 4:return "E"elif answerList.index(key) == 5:return "F"else:passdef get_answer_multi(self,randomExerciseSortId,answerList):'''多选题 答案获取'''url = "https://hike-examstu.zhihuishu.com/zhsathome/randomExercise/submitAnswer?uuid={}".format(self.uuid)headers = {"Content-Type": "application/json",}key_list = self.get_key(answerList)for key in key_list:if len(key)>0:key_new = [str(i) for i in key]key_str = ",".join(key_new)data = {"data": {"answerContent": str(key_str), "fileList": [], "isReview": True,"randomExerciseSortId": randomExerciseSortId,"courseId": "10464858"}}res = requests.post(url, headers=headers, data=json.dumps(data))if res.json()["rt"] == True:r_answer_list = []for i in key:if answerList.index(i)==0:r_answer_list.append("A")if answerList.index(i)==1:r_answer_list.append("B")if answerList.index(i)==2:r_answer_list.append("C")if answerList.index(i)==3:r_answer_list.append("D")if answerList.index(i)==4:r_answer_list.append("E")if answerList.index(i)==5:r_answer_list.append("F")return ",".join(r_answer_list)else:passelse:passdef get_key(self,answerList):'''返回多选题选项所有不重复的组合'''lena = len(answerList)sum = []for i in range(2 ** lena):comb = []for j in range(lena):if (i >> j) % 2 == 1:comb.append(answerList[j])sum.append(comb)return sumif __name__ == '__main__':sp = Spider()sp.get_content()

“知道”题库脚本——升级版相关推荐

  1. python 题库自动答题,自动匹配题库_如何用python写一个从题库自动匹配的答题脚本_淘题吧...

    A. web数据库题目:根据用户输入的用户名和密码于数据库中的记录是否匹配制作一个用户登录模块 http://blog.csdn.net/love_leve/article/details/43226 ...

  2. 《Python程序设计》题库(2)

    侵权联系我删除: [写在这里,方便右键百度搜索!] <Python程序设计>题库 填空题 Python安装扩展库常用的是_______工具.(pip) Python标准库math中用来计算 ...

  3. OCP12C题库,62数据库备份与恢复(admin,install and upgrade accelerated, backup and recovery workshop -62)(新增)

    题数:20+53 10月新增 5 examine the details of the uncompressed,non-partitioned heap table cities. 检查未压缩.未分 ...

  4. 【渝粤题库】广东开放大学 java web开发技术 形成性考核

    题库查询系统 选择题 题目:当多个用户请求同一个JSP页面时,Tomcat服务器为每个客户启动一个_____. 题目:以下_____不是JSP运行所必须的条件. 题目:Tomcat服务器的默认端口为_ ...

  5. python选择题库和答案_python根据题库答案自动答题

    学习python有一段时间了,一直没有一个完整的项目.这次总算完成了一个小的项目-自动打开网页答题,虽然还不是很完美,也足够用了. 分享下过程. 首先理清思路:解析网页-->提取题目--> ...

  6. 计算机应用基础名词解释动画,《计算机应用基础》期末考试复习题库-名词解释题题库...

    <计算机应用基础>名词解释题题库 (Windows XP + Office 2003) 1.Internet临时文件 答:为了提高浏览网页的速度,IE会使用专门的文件夹将访问过的网页中的C ...

  7. 全国青少年编程等级考试scratch三级真题2021年9月(含题库答题软件账号)

    对青少年编程等级考试scratch真题答题考试系统关注的请点击** 电子学会-全国青少年编程等级考试真题Scratch一级(2019年3月)在线答题_程序猿下山的博客-CSDN博客_小航答题助手 一. ...

  8. 全国青少年编程等级考试python一级真题2022年3月(含题库答题软件账号)

    对青少年编程等级考试Python真题答题考试系统关注的请点击 全国青少年编程等级考试python一级真题2020年12月(含题库答题软件账号)_程序猿下山的博客-CSDN博客_python编程一级试卷 ...

  9. 一亩三分地,答题题库,1point3acres (Time series,每周末答题一次/更新一次)

    一亩三分地对我的留学申请和签证提供了很多帮助.来美国之后,有两年没怎么上一亩三分地了,最近有看面经的需求,于是我又回到了一亩三分地的怀抱... 一亩三分地学了B站,注册新账户之后弄了一个考试.考试通过 ...

最新文章

  1. 指挥控制系统中的自然智能和人工智能
  2. 中国芯片将靠此超车!RISC-V架构神在哪全解构【附下载】
  3. python2.6更改为Python2.7
  4. Delphi字符串函数Delete
  5. 前端代码(移动端app, vue 源代码)打包方法
  6. dp之二维背包poj1837(天平问题 推荐)
  7. NOI大纲 CSP初赛篇·知识大纲 CSP-入门级-NOI大纲
  8. 解封装(九):av_read_frame和av_seek_frame代码示例分析内存占用和清理情况
  9. 程序竞赛中常用的C字符串函数
  10. 股票软件开发中全推与点播的区别(自己留作记录的,请csdn的小编别乱删我的文章)...
  11. VNC Connect Enterprise for mac(远程桌面软件)
  12. 火狐浏览器安装插件步骤
  13. 【laravel】切换语言包 中文,英文
  14. 如何提供网络冗余和稳定连接
  15. 啥水平?谷歌程序员:我用东北方言编程
  16. java微信公众号开发一:服务器信息配置
  17. 如何设计空白页面,体验更好!
  18. 谷歌浏览器如何配置SSL证书
  19. 小米wifi智能家居android,小米智能家居:米家智能插座的无线协议——Wi-Fi与Zigbee...
  20. 【最大公约数】Round Corridor

热门文章

  1. 如何安装 Microsoft Office 兼容包,以便能够使用早期版本的 Excel、PowerPoint 和 Word 来打开和保存来自 2007 Office 程序的文件
  2. 算法训练 奥运会开幕式 Java
  3. js写一个气泡屏保能碰撞
  4. VIRTINS Multi-Instrument虚拟示波器HANTEK6022插件说明
  5. 手把手教你读财报----银行业---第十四课
  6. 数字化采购管理 招标采购系统源码
  7. 阿乐卡特交换机配置手册
  8. 网页显示不全(运行时网页pc端显示完全,手机端显示不全)
  9. 摩根士丹利:中国正在重置其经济底层逻辑
  10. Volley传入请求体不成功的解决方案