爬取某笔公考app公基题库的操作

最近在准备上岸,备考中需做大量的练习,手机APP让练习无处不在,但有个缺点,就是每次只能练习10-20道题目,不能用题海战术,海量做题。能不能把网站的题库及解析都弄下来,在本地电脑上做题呢?以下是我的思路:1、分析并爬取手机软件的题库;2、调整好格式存入xls文件中;3、导入PC版可自定义的考试系统中(如教之初考试系统免费版);4、自行设置考试模式,海量练习。

涉及到几个点。

1、关于手机网络数据的分析,我是用Fiddler4进行的分析。

2、关于excel表格的操控,之前想用xlwings模块,后因没装office,用的是wps2013政府阉割版,无法操控,后改用xlrd、xlutils、shutil、os模块自己写了一个excel操纵类对象,发现还是有问题,后卸载阉割版wps,换了wps2016最新版的,就可以操作了。后来也没换xlwings模块了,将就着用自写模块。大坑:xlrd模块好像不支持中文路径,全部换用英文路径,最后再把文件夹及文件名转换成中文的。

3、题库分类保存。

1、Fiddler抓包手机APP的网络请求

设置在同一局域网下电脑端Fiddler抓取手机APP应用网络请求的步骤:

(1)电脑端启动Fiddler,打开菜单栏中的Tools>FiddlerOptions,打开“FiddlerOptions”对话框。

(2)在FiddlerOptions”对话框切换到“Connections”选项卡,然后勾选“Allowromotecomputerstoconnect”后面的复选框,然后点击“OK”按钮。(小技巧:HTTPS标签中可以设置下拉框为...fromremoteclientsonly,貌似就只接收远程端的网络请求了)

(3)在电脑端的命令行输入:ipconfig,找到本机的ip地址。(我的局域网IP:192.168.1.10)

(4)在手机端,打开android设备的“设置”->“WLAN”,找到你要连接的网络,在上面长按,然后选择“修改网络”,弹出网络设置对话框,然后勾选“显示高级选项”。(其实苹果手机也是类似的)

(5)在“代理”后面的输入框选择“手动”,在“代理服务器主机名”后面的输入框输入电脑的ip地址,在“代理服务器端口”后面的输入框输入8888,然后点击“保存”按钮。

(6)然后启动android设备中的APP应用,在fiddler中可以看到完整的请求和响应数据。

2、手机APP应用网络数据分析

手机上打开某笔公考软件后,从Fiddler左侧栏中可以看到大量的请求链接。

点击上图黄色区域的链接,可看到右侧详细数据。

post请求的参数keypointId=621638&type=3&limit=15

返回的数据为Json格式,从返回数据中我们可以找出questionIds对应的题目编号,如2084744.

点击上上图(Fiddler网络请求响应)中红色框中的链接地址,我们可以看到右侧详细数据栏的数据

从上图中我们可以找到ID号为2084744的题目的题干、选项、题型、答案等有用数据。

另外,从左侧请求链接可以找出对应的章节分类请求链接,根据分类号再查找对应的questionids,就可以把所有的题目抓取出来。

3、xls操控

将就着基于xlrd模块编写自用模块。

源码在此,可能格式错乱。需整理。

'''python

#!/usr/bin/envpython3

#-*-coding:utf-8-*-

"""

Createdon2018-05-1412:48:07

@author:wangzheng

Sys_Env:Windows_AMD64Python3.5.2

Filename:MyXls.py

Description:xls文件操控类MyXls

注意:文件路径中不能有中文名,否则出错

fromxlrdimportopen_workbook

fromxlutils.copyimportcopy

importos,shutil

classMyXls:

def__init__(self,fpath=None,modelfpath=None,sheetindex=None,protectrow=None,overwrite=True):

self.openxlspath=''#已打开的xls文件

self.sheetindex=None#当前工作表索引

self.rb=None#

self.wb=None#workbook工作簿

self.ws=None#worksheet工作表

self.headrow=0#开头保护行数

if(fpathisnotNone)and(modelfpathisnotNone):

self.open_copy_xls(modelfpath,fpath,True)

eliffpathisnotNone:self.open_xls(fpath)

ifsheetindexisnotNone:self.get_sheet(sheetindex)

ifprotectrowisnotNone:self.headrow=protectrow

defopen_xls(self,fpath):

path=fpath

try:

rb=open_workbook(path)

exceptExceptionaserr:

print("Filenotexists:"+str(err))

returnFalse

#通过sheet_by_index()获取的sheet没有write()方法

#rs=rb.sheet_by_index(0)

#rs=rb.sheet_by_name('sheet1')

self.wb=copy(rb)

self.openxlspath=path

returnTrue

defget_sheet(self,sheet_index=0):

sheets=sheet_index

#通过get_sheet()获取的sheet有write()方法

self.ws=self.wb.get_sheet(sheets)

self.sheetindex=sheets

defwrite_xls(self,row_index,column_index,data_str):

row,col,data=row_index,column_index,data_str

#写入数据

self.ws.write(row,col,data)#write(行,列,内容),索引从0开始

defwrite_xls_bycolname(self,row_index,column_name,data_str):

column_index=self.colname_to_num(column_name)

defwrite_xls_bysheet(self,sheetindex,row_index,column_name,data_str):

'''在指定工作表的指定行列表格中写入数据'''

ifself.sheetindex!=sheetindex:self.get_sheet(sheetindex)

self.write_xls_bycolname(row_index,column_name,data_str)

defsave_xls(self,fpath=None):

iffpathisNone:

self.wb.save(self.openxlspath)

print('saved'+self.openxlspath)

else:

self.wb.save(path)#保存xls文件

print('saved'+path)

defopen_copy_xls(self,model_fpath,new_fpath,overwrite=True):

'''参照模板文件,复制并打开xls文件'''

ifos.path.exists(model_fpath):

new_fpath=self.auto_mkdir(new_fpath)

if(notos.path.exists(new_fpath))oroverwrite:

#print('copy[%s]to[%s]'%(model_fpath,new_fpath))

shutil.copy(model_fpath,new_fpath)

returnself.open_xls(new_fpath)

else:print('新文件已存在,请修改新文件名!');returnFalse

else:print('模板文件不存在,不能复制到新文件!');returnFalse

defnum_to_colname(self,col_index,start=0):

#列索引转列名,基数start从0开始,0-->A

iftype(col_index)!=int:

returncol_index

ifstart==0:

x=col_index+1

elifstart==1:

x=col_index

s=''

flag=False#借位标志

whilex>26:

y=x%26#取余0-25

ify==0:y=26;flag=True;

d=chr(y+64)#低位

s=d+s

x=x//26#整除取商

ifflag:x=x-1;flag=False;#如果借位,商要先-1

g=chr(x+64)#高位

s=g+s

returns

defcolname_to_num(self,colname,start=0):

#列名转列索引A-->0,B->1,开始基数start为0

iftype(colname)isnotstr:

returncolname

colname=colname.upper()#转成大写

col=0

power=1

#print(len(colname))#位数

foriinrange(len(colname)-1,-1,-1):#range(start=0,stop,step=1)

ch=colname[i]#倒序取字母

#print(ch)#所在位上的字母

col+=(ord(ch)-ord('A')+1)*power

power*=26

#print(col-1)

ifstart==0:returncol-1

ifstart==1:returncol

defauto_mkdir(self,fpath):

'''自动补全目录,目录不存在就创建目录'''

#fpath='D:\\MyPython\\粉笔公考题库提取\\678\\980\\test.txt'

fpath=fpath.replace('\\','/')

ifnotos.path.exists(fpath):

plst=fpath.split(sep='/')

path=''

ifnotfpath.endswith('/'):plst=plst[:-1]

forpinplst:

path=path+p+'/'

ifnotos.path.exists(path):os.mkdir(path)

returnfpath

if__name__=='__main__':

model_fpath='D:\\MyPython\\model.xls'

new_fpath='D:\\MyPython\\abc\\123/out.xls'

#myxls=MyXls()

#myxls.open_copy_xls(model_fpath,new_fpath)

#myxls.get_sheet(0)

myxls=MyXls(new_fpath,model_fpath,2,3)

myxls.write_xls_bycolname(6,'K','K列6行数据')

#myxls.save_xls(new_fpath)

myxls.save_xls()

pass

'''

4、文件保存

保存成xls文件,和txt文件,txt文件再转换成word文档打印出来。大概有7个大类,100+小类,12737道题。

5、导入题库软件

xls文件导入题库中。

6、大功告成

PS:某笔app更新后,加入了防抓取数据的功能,貌似安卓5.1以上的都不能抓取了。

据资深网友反应,使用安卓模拟器(系统版本4.4)还可以抓到明文数据,有兴趣的读者可以试一试。

THE END
1.首页200题 500题 800题 批改作业 公开题库谁能访问 所有用户 所有用户 仅单位用户 群组谁可申请加入 所有用户 所有用户 仅单位用户 批量开户 - - 定制首页轮播图 - - Web版刷题功能 - 导入题库服务 - 在线客服 5 x 8 支持 6 x 8 支持 7 x 8 专属客服 https://www.motibang.com/
2.什么可以导入题库刷题软件大全什么可以导入题库刷题推荐下载PP助手为您提供什么软件可以导入题库刷题大全推荐,在这里我们为您提供什么软件可以导入题库刷题软件下载资源,什么软件可以导入题库刷题安卓版本、官方版本&老版本下载地址合集,还可查阅相关什么软件可以导入题库刷题攻略大全,欢迎到PP助手下载。https://wap.pp.cn/topic/495494/
3.考试宝考试宝是可以导入自己题库的在线考试刷题组卷学习平台,在电脑端导入试题,在手机APP上刷题,支持在线练习、随机抽题模拟考试、刷题、搜索答案,支持自助导入Word、Excel题库文档,辅助整理导入Word、Excel、PDF、CSV、TXT、Numbers等多种文档格式导入,高效快捷,支持制作http://kaoshibao.com/
4.考试酷如何导入题库考试酷导入题库方法详解考试酷如何导入题库 考试酷导入题库方法【详解】 1、准备工作 只有身份是“老师|考试主管”的 考试酷 用户才能录入试卷。 如果您的身份是“学生|考生”,请首先通过“我的考试酷 > 我的资料 > 变更为老师身份”成为“老师|考试主管”。 2、录入新试卷https://pcedu.pconline.com.cn/1586/15863707.html
5.一款可以导入自己的题库和自带题库的刷题软件刷题小工坊v0.8.2我可以帮助您解决,请放心制作题库。感谢信任。*这是一款自助导入题库的软件,所以不会自带太多的题库https://www.52pojie.cn/thread-1337924-1-1.html
6.小包搜题app官方免费版小包搜题安卓版小包搜题采取人工智能方式,智能识别格式,智能处理题目,大大降低题库制作成本,轻松导入题库,而且支持分享给同事同学,大家一块使用。3、提供多种找题搜题辅助学习方式小包搜题提供多种搜题工具如扫描搜题,智能搜题,便捷搜题。多种搜题方式总有一种能让你找到你想要的题目,然后加深题目记忆。4、应用支持离线使用,https://liqucn.com/os/android/rj/201406.wml
7.python根据题库自动答题脚本mob64ca12f3bbc7的技术博客接下来,我们将实现一个简单的Python脚本,来读取题库,并根据题目自动生成答案。 3.1 导入必要的库 首先,我们需要导入读取JSON文件的库。 importjson 1. 3.2 读取题库 下面的代码展示了如何从JSON文件中读取题库数据。 defload_questions(filepath):withopen(filepath,'r',encoding='utf-8')asf:data=json.load(https://blog.51cto.com/u_16213445/11783096
8.[考试必备]将word题库导入手机小序随时高效刷题题库导入刷题小程序文章浏览阅读324次。将你的Word/PDF题库华丽变身Excel格式,就能免费入驻我们的刷题小程序!随时随地,指尖轻触,开启你的学霸模式!_题库导入刷题小程序https://blog.csdn.net/qq_29145989/article/details/140609152
9.自制题库随机出题app合集自己导入题库刷题的app现在提升学习的方法越来越多,很多同学想提升自己的学习成绩,社会人士想提升自己的专业知识,那么到底该怎么提升了,今天小编就来给大家分享一些非常棒的手机刷题软件哟,里面都有很专业的题目供大家练习,甚至可以自己导入想练习的题材,内置资源都是同步更新的,非常的方http://www.ishaohuang.com/s/zztksjct/
10.如何题库管理2、创建题库目前仅支持公开类型题库,即所有学员均可免费报名题库进行练习 二、完善题库内容 第一步:创建单元 单元作用:对题库进行分类管理,学员可针对性的进行练习 。单元数量上限:20个 第二步:单元内导入题目 tips:单元内题目上限:2000题 题目类型:本期暂不支持材料题型导入,后续优化后可支持 特别说明:从题库https://www.cctalk.com/faq/100759
11.快考题快考题在线考试管理平台,应用于微信考试、付费考试、社会调查问卷、员工学习培训考核、模拟自测、企业面试、性格测试等大规模考试场景,拥有一键导入题库、智能判卷、多维度分析、不限终端等功能,系统稳定流畅,创建高效考试场景,是培训教育机构、企事业单位创建无纸化考试平https://m.kuaikaoti.com/
12.刷刷题大学职业搜题刷题APP刷刷题APP(shuashuati.com)是专业的大学职业搜题刷题备考工具;制作自己的在线小题库,一键将WORD,EXCEL,PDF文档生成题库手机刷题.几十万题库,覆盖全国128门大学职业考试,如四六级,医考,护考,考公考编,会计,教资,建筑,金融,消防,自考,导游等考试https://www.shuashuati.com/
13.添加活动测试【智能录入】分为“文本输入区”和“题目预览区”,在你输入文本的时候“题目预览区”会提示你设置题目的规范,设置完成之后点击右下方的“导入题库”即可,如下图: 模板导入:点击【模板导入】,进入下载模板页面,根据你自己的需求,选择“点击下载 Word 模板”或“点击下载 Excle 模板”,将模板下载到本地,依照模板https://help.mosoteach.cn/add-test.html