js逆向 签名参数解析 驾考数据科目一科目三题库爬虫分享 python scrapy

1 篇文章 0 订阅

注:本篇意在学习,如有侵权,请联系删除

之前有用selenium抓取科目一试题,但是只能抓到题干和试题答案,抓不到试题分析还有答题技巧,因为接口中有一个叫做   _r     的签名参数是加密过的,扣JS又太麻烦, 今天比较闲就想着来试试
环境:

windows10         

python 

scrapy

mysql
废话不多说

 首先分析数据接口url的参数

https://api2.jiakaobaodian.com/api/open/question/question-list.htm?_r=115588757061507390094&questionIds=888800%2C893400%2C888600%2C895800%2C890700%2C1162800%2C876400%2C880000%2C879800%2C875700  (注此链接点击一次即失效,因为每个_r只能用一次)


questionIds这个很明显后面是跟的题目的id中间有逗号用urlencode转码即可    不转也行 首先说一下题目id从哪来,下面这个url
https://api2.jiakaobaodian.com/api/open/exercise/sequence.htm?_r=115154426246160380075&carType=car&cityCode=110000&course=kemu3
course
参数后面跟的值就是kemu几,此处是科目三,cityCode这个参数后面是跟的城市代码,有一些城市的题目数量是不同的,但是全国的话题目数量是最多的,110000就是全国的城市代码,这里可以看到这个接口里也是有_r 这个签名存在的,那么接下来就进入正题

首先可以看到在network中 想要的数据是XHR类型的,想找到参数_r是怎么来的, 第一步先在

这个位置给所有的XHR数据传输打上断点,

然后咱们手动点击下一题,一般点击25下,就会有数据传输,因为他每次是25个题目数据一起传出来的

首先看到是在这停的,可以看到这个时候_r 已经有值了,那么我搜索e.paramString 看看他的_r是在哪传过来的,

然后搜索到了这里,可以看到这个时候_r还是没有值的,哪就在这下了个断点,

接着来,就调到了这里

断点是我后来加的,此时请忽略,看下张图

这个时候我发现,s(1)他的值,就是我要找的_r  接下来测试下

把他带入到url试一下,果然是它,知道是那个函数了,哪就扣它。然后就像上面那张图,下了那么多断点,n += parseInt(o[a]);    在这个地方 发现他会循环好多次调到下图

会调到这里来,接下来就好起来了,

看这两张图能看到 _r=  t+o+n ,

那么把这个还有return s(1)那个粘到同一个js中,来用python来试一下

把这个值带入url一试,果然,就是它就是它,接下来就创建scrapy 项目,直接调用s()函数就ok了,_r签名已经ok了,接下来就是抓取数据了。给大家看下结果

结果

这里说下哈,图片存base64或者 字节流的话,打开表速度会慢一些,所以分贝把科目一科目三的图片和动图(动图是mp4格式)下载到了本地,,这里给图片存了一个网络地址字段,一个本地地址字段,这篇讲的是小汽车的数据,其他车型的,原理也是一样的。

数据+源码 :  数据+源码 点这里

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值