zxm870973 发表于 2020-6-22 14:10

学小易接口抓取与分析

由于本人最近上网课有好多题目不会做,然后就有好友向我推荐“学小易”这款搜题软件。
用着用着发现这款软件很好,基本所有的题目都能搜索到,慕课上的或者其他题目它都能搜索到。
美中不足就是发现学小易没有电脑端,每次搜题都要把题目发送到手机搜索,觉得很麻烦,所以就有了这篇文章。

第1步,打开MUMU模拟器,启动黄鸟。

第2步,打开学小易进行搜题,比如我随便搜索一下。

第3步,打开黄鸟,查看抓包内容,可以发现这里我们发送的是post请求

然后post请求参数如下:

发现学小易这边的返回的都是明文,并没有加密

我们转码看一下,直接就可以得到明文了并不需要解密。



通过我反复测试分析,发现有些请求并不需要都传过去,并且可以直接通过get请求获取结果。


可见,只需请求 http://app.51xuexiaoyi.com/api/v1/searchQuestion?keyword=你需要搜索的题目
然后在header传入你的token,app-version就可以正确的请求接口。接下来我们就可以自制一个自己专用的搜题软件了。
java 请求核心代码如下:

作者自用的PC版搜题软件如下:嘿嘿!!



yongee 发表于 2020-6-24 11:38

我刚把篇帖子里的python代码给优化啦一下
我是加啦一个自己登录的地方 这样每个人不用去自己抓token 用自己的账号搜 也不出意外
import requests

import json
import re
while True:
    user = input("请输入你的学小易账号:");
    password = input("请输入你的学小易密码:");
    print('正在登陆中...请稍等!')
    url0='https://app.51xuexiaoyi.com/api/v1/login'
    data0 = {
      "username":user,
      "password":password
             }
    headers0 = {
      'platform':'android',
      'app-version':'1.0.6',
      'content-type':"application/json; charset=utf-8",
      'accept-encoding':'gzip',
      'user-agent':'okhttp/3.11.0'
    }
    denglu=requests.post(url0, headers=headers0,json=data0).text.encode('utf-8').decode('unicode_escape')
    print(denglu)
    if '登录成功' in denglu:
      tokens=re.search(r'"api_token":"(.*)","userid"',denglu).group(1)
      #print(tokens)
      break
while True:
    a = input("请输入需要查的题目:");
    url = 'https://app.51xuexiaoyi.com/api/v1/searchQuestion'
    data = {
      'keyword': a
    }
    headers = {
      'token': tokens,
      'device': '',
      'platform': 'android',
      'User-Agent': 'okhttp/3.11.0',
      'app-version': '1.0.6',

      'Content-Type': "application/x-www-form-urlencoded; charset=UTF-8",
      'Accept-Encoding': "gzip, deflate, br"
    }
    r = requests.post(url, headers=headers, data=data)
    # print(r1.json())

    html1_str = json.dumps(r.json(),sort_keys = True, indent = 4, separators = (',', ':'))
    str =html1_str.encode('utf-8').decode('unicode_escape')
    forword = re.sub(r'"ey(.*)",',' ', str)
    print(forword)

忆白学渣 发表于 2020-6-22 15:11

隔壁家的王二狗 发表于 2020-6-22 15:05
老哥完整代码发一下我去试试

import requests

import json



while True:
    a=input("请输入需要查的题目:");
    url='https://app.51xuexiaoyi.com/api/v1/searchQuestion'
    data={
      'keyword': a
    }
    headers = {
      'token':'你自己的',
      'device':'这里应该也是你自己的,忘了',
      'platform':'android',
      'User-Agent':'okhttp/3.11.0',
      'app-version':'1.0.6',
      
      'Content-Type': "application/x-www-form-urlencoded; charset=UTF-8",
      'Accept-Encoding': "gzip, deflate, br"
      }
    r = requests.post(url,headers=headers,data=data)
    #print(r1.json())
   
    html1_str=json.dumps(r.json(), sort_keys=True, indent=4, separators=(',', ':'))
    print(html1_str.encode('utf-8').decode('unicode_escape'))
   

忆白学渣 发表于 2020-6-22 14:17

我之前用Python搞过一次,第二天就账号异常了:'(weeqw

忆白学渣 发表于 2020-6-22 14:19

niebaohua 发表于 2020-6-22 15:25

http://yanxuan.nosdn.127.net/db0bdf2c1dfb696a485516c5c99b6995.png

zxm870973 发表于 2020-6-22 15:04

wyc1122wyc 发表于 2020-6-22 14:59
可否提供源代码。。

改天写个简单的java版demo吧,但是实际还是用的自己的token,只是不需要打开手机再搜题

moyuwl 发表于 2020-7-2 07:46

哈哈呵呵哒哒 发表于 2020-6-30 20:04
大佬手机小黄鸟是不是要vpn过检啊,为什么我抓学小易的时候都直接网络异常,软件能不能分享一下

用模拟器搞

culprit 发表于 2020-6-22 16:12

这样还是要登账号啊

zxm870973 发表于 2020-6-22 14:26

忆白学渣 发表于 2020-6-22 14:17
我之前用Python搞过一次,第二天就账号异常了

我都挂我服务器好久了,今天还能用啊,你是不是请求太频繁了

zxm870973 发表于 2020-6-22 14:27

忆白学渣 发表于 2020-6-22 14:17
我之前用Python搞过一次,第二天就账号异常了

你是不是准备爬它题库{:1_926:} 我就是平常搜题自己用用

忆白学渣 发表于 2020-6-22 14:28

zxm870973 发表于 2020-6-22 14:27
你是不是准备爬它题库 我就是平常搜题自己用用

唔,可能是{:301_998:}

戒心 发表于 2020-6-22 14:40

他这个题库实属庞大

wyc1122wyc 发表于 2020-6-22 14:59

可否提供源代码。。

KSPprince 发表于 2020-6-22 15:01

这样的题库包含了什么科目,是所有科目都支持吗

zxm870973 发表于 2020-6-22 15:03

KSPprince 发表于 2020-6-22 15:01
这样的题库包含了什么科目,是所有科目都支持吗

你可下载手机版的学小易搜索试试,题库确实很不错,但是一般人做题很少用手机搜索,相对较麻烦
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 学小易接口抓取与分析